`
finally_mm
  • 浏览: 24371 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

new Date(new Date().toString())结果与new Date()结果不一样的原因

JDK 
阅读更多
Date now=new Date();
System.out.println(now.toString());//Fri Mar 12 14:05:48 CST 2010

Date snow=new Date(new Date().toString());
System.out.println(snow.toString());//Sat Mar 13 04:05:48 CST 2010

这两个结果相差了14个小时

分析原因:
public Date(String s)已过时。从 JDK 1.1 开始,就像通过 parse(java.lang.String) 方法解释一样。
public static long parse(String s)
先把字符串 s 解释为日期和时间的表示形式。如果尝试成功,则返回指示的时间,如果尝试失败,则抛出 IllegalArgumentException。

它接受许多语法;
特别是它识别 IETF 标准日期语法:"Fri, 12 Mar 2010 13:47:17 GMT";格林威治时间
如果使用时区偏移量:"Fri, 12 Mar 2010 13:47:17 GMT+08";北京时间
如果没有指定时区,则假定用本地时区。

而new Date().toString()的结果是"Fri Mar 12 13:47:24 CST 2010",那么在解析的时候,连续的字母序列被认为是单词,并按以下方法进行处理:

(1)忽略匹配 AM(上午)(忽略大小写)的单词(但如果小时尚未识别,或者小时小于 1 或大于 12,则分析失败)。
(2)匹配 PM(下午)(忽略大小写)的单词,添加 12 到小时(但如果小时尚未识别,或者小时小于 1 或大于 12,则分析失败)。
(3)忽略匹配 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 或 SATURDAY 的任何前缀(忽略大小写)的任何单词。例如,sat、Friday、TUE 和 Thurs 会被忽略。
(4)否则,匹配 JANUARY、FEBRUARY、MARCH、APRIL、MAY、JUNE、JULY、AUGUST、SEPTEMBER、OCTOBER、NOVEMBER 或 DECEMBER 的任何前缀(忽略大小写,并按这里给出的顺序考虑它们)的任何单词都被识别为指定月份,并被转换成一个数字(0 至 11)。例如,aug、Sept、april 和 NOV 被识别为月份。Ma 也是这样,它被识别为 MARCH,而不是 MAY。
(5)匹配 GMT、UT 或 UTC(忽略大小写)的任何单词都认为是指 UTC。
(6)匹配 EST、CST、MST 或 PST(忽略大小写)的任何单词都被认为是指北美的时区,该时区分别比格林威治时间晚 5、6、7 或 8 小时。匹配 EDT、CDT、MDT 或 PDT(忽略大小写)的任何单词都被识别为在夏令时期间分别指相同的时区。

因此,在本例中因为匹配CST,则认为该字符串的时区为北美的时区,那么这个字符串的时间被当成了北美的现在时间,
然后new Date(s),把该字符串所表示的时间,按照本地时区,即北京时间表示出来,这样就相差了14个小时
分享到:
评论

相关推荐

    NextDate函数

    软件测试NextDate函数测试用例 System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff"); //2008年04月24 15时56分48秒 System.DateTime.Now.ToString("yyyy年MM月dd HH时mm分ss秒"); //星期二, 四月 24 ...

    java常用包。Date类,tostring方法视频

    java内常用包,date类,toString的使用方法

    C# 编程连接oracle数据库方法

    selcmd.CommandText = "select * from emp where HIREDATE < to_date('1987-11-26','yyyy-mm-dd') "; OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = selcmd; DataSet ds = new ...

    C#(ASP.NET)DateTime日期类型格式化显示

    Convert.ToDateTime("2005-8-23").ToString ("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁体数据库 5.直接用ToString方法转换日期显示格式: DateTime.Now.ToString(...

    多种获得当前时间方法

    //获取日期+时间 DateTime.Now.ToString(); // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString(); // 2008-9-4 20:12:12 ...DateTime.Now.Date.ToString(); // 2008-9-4 0:00:00 还有更多方法,请下载学习

    js对日期操作

    Date.prototype.toString 日期转字符串 Date.prototype.toArray 日期分割为数组 Date.prototype.DatePart 取日期的部分信息 Date.prototype.MaxDayOfDate 取日期所在月的最大天数 Date.prototype.WeekNumOfYear 判断...

    js日期时间格式验证,时间比较

    Date.prototype.toString 日期转字符串 Date.prototype.toArray 日期分割为数组 Date.prototype.DatePart 取日期的部分信息 Date.prototype.MaxDayOfDate 取日期所在月的最大天数 Date.prototype.WeekNumOfYear 判断...

    JSON序列化与反序列化JAVA工具

    本JSON是基于JAVA7编写,对比阿里的JSON三次测试结果如下: 10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1229 1133 1179 阿里反序列化时间 478 523 466 HZS序列化时间 1089 998 1010 HZS反序列化时间 606 ...

    JSON序列化及反序列化工具

    本JSON是基于JAVA8编写,对比阿里的JSON三次测试结果如下: 10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1122 1054 1115 阿里反序列化时间 409 423 412 HZS序列化时间 884 864 880 HZS反序列化时间 392 ...

    Android_0618_Note

    String time = sdf.format(new Date()); db = myHelper.getWritableDatabase(); values.put("title", title); if (content != null) { values.put("content", content); } values.put("time", time);...

    js new Date()实例测试

    var t = new Date().toString(); //t = "Thu Oct 31 2019 11:36:57 GMT+0800 (中国标准时间)" var t1 = new Date(); var data_arry =[]; var that = new Date(); data_arry.push(that.constructor()); // Thu ...

    c#中的常用ToString()方法总结

    对于int,double等的tostring: C     货币     2.5.ToString(“C”)     ¥2.50     D     十进制数     25.ToString(“D5”)     00025     E     科学型     25000....

    flex开发对时间控制

    '/' + (date.getMonth()+1).toString() + '/' + date.getDate(); } ]]> paddingTop="10" paddingLeft="10" paddingRight="10"> text="Select a date in the DateField control. Select it again to ...

    mpxj-0.0.25, 可以解析.mpp(ms project)文件

    planStart = new Long(planStartDate.getTime()).toString(); } //处理完成时间 Date planStopDate = t.getFinish(); String planFinish = "-1"; if (planStopDate != null) { ...

    LINQ字符串向datetime 转换时失败的处理方法

    代码如下:from j in system.jhzdwhere j.dwbm.ToString().Trim() == branchcode.ToString().Trim()&& Convert.ToDateTime(j.yearmonth.ToString().Trim()).CompareTo(Convert.ToDateTime(timeFrom)) >= 0&& Convert...

    基于poi Excel导出

    map.put("date", new Date()); map.put("现金", 20.365); System.out.println(map.keySet().toString()); System.out.println(map.values().toArray()[0]); System.out.println(Calendar.getInstance()); ...

    Unity中 日历面板(NGUI)

    string year = date.Year.ToString(); string month = date.Month.ToString(); string day = date.Day.ToString();

    sql访问数据库工具类--SqlUtils(java源码)

    } else if (object.getClass().equals(Date.class) || object.getClass().equals(Timestamp.class)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return "to_date('" + sdf...

    jsp 火车订票系统

    List lstTrainNoSeatExist = this.sellTicketService.queryNoSeat(intervalBit.longValue(), Integer.parseInt(obj[0].toString()), date); if(lstTrainNoSeatExist.size() > 40){ jsObj.put("无座",...

    date-time.js:Date-Time.js-简单JavaScript日期和时间函数

    var d = new Date ( ) ; var colon = ":" ; var space = " " ; // month-year.js var year = d . getFullYear ( ) . toString ( ) ; var m = [ "January" , "February" , "March" , "April" , "May" , "June" , ...

Global site tag (gtag.js) - Google Analytics