`
finally_mm
  • 浏览: 25093 次
  • 性别: 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个小时
分享到:
评论

相关推荐

    java.util.Date与java.sql.Date相互转换

    String dateStr = sqlDate.toString(); java.util.Date utilDate = dateFormat.parse(dateStr); // 注意:这里需要将日期字符串转换为符合 "yyyy-MM-dd" 格式的形式 ``` 3. **直接转换** 由于 `java.sql....

    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 ...

    javaScript日期加减

    "0" + (newDate.getMonth() + 1).toString() : (newDate.getMonth() + 1).toString(); var dayString = newDate.getDate().toString().length == 1 ? "0" + newDate.getDate().toString() : newDate.getDate()....

    Java 之 Date 和 Calendar 实例

    Date now = new Date(); System.out.println(now.toString()); Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getTime().toString()); ``` 2. 修改日期和时间: ```java calendar.set...

    JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,Object.prototype.toString是一个基础的方法,它用于返回一个表示对象类型的字符串。了解这个方法的工作原理是很有帮助的,特别是在我们需要检测一个变量的类型时。本文将探讨Object.prototype....

    tostring()函数详解,tosring

    * dt.Date.ToString(),将日期时间转换为日期,例如 DateTime.Now.Date.ToString() 将输出当前日期。 * dt.DayOfWeek.ToString(),将日期时间转换为星期几,例如 DateTime.Now.DayOfWeek.ToString() 将输出当前星期...

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

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

    json返回date类型转为字符串.docx

    console.log(date.toString()); // 输出:Wed Mar 15 2023 14:30:00 GMT+0800 (China Standard Time) ``` 然而,这种方法并不能满足我们的需求,因为它不能指定日期的格式。为了解决这个问题,我们可以使用 ...

    c#字符串格式化ToString总结[参考].pdf

    此外,还可以使用 Date 和 Time 的各个部分的 ToString() 方法来输出相应的字符串,例如 dt.Year.ToString() 输出 2005,dt.DayOfWeek.ToString() 输出 Saturday 等。 C# 中的字符串格式化提供了多种灵活的格式化...

    js时间操作方法大全集锦完整版

    2. **`Date.UTC()`**:返回指定日期的UTC毫秒值。 ```javascript let utcValue = Date.UTC(2023, 11, 31); console.log(utcValue); ``` #### 结论 以上就是JavaScript中`Date`对象的主要操作方法。通过这些...

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

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

    C_获取当前时间的各种格式

    - **`dt.Date.ToString()`**:获取当前日期,不包括时间部分。 示例: ```csharp string dateOnly = DateTime.Now.Date.ToString(); // 输出类似于 "2005-11-5 0:00:00" ``` - **`dt.DayOfWeek.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 ...

    java插入oracle中date类型方式.docx

    java.util.Date utilDate = dateFormat.parse(sqlDate.toString()); // sqlDate转utilDate java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); // utilDate转sqlDate ``` 3. **直接转换** 由于`...

    java的Date类型转换成MySQL的DateTime类型.docx

    String dateToString = date.toString(); // 提取年份 ret.append(dateToString.substring(24, 24 + 4)); // 获取 "2005" // 提取月份 String sMonth = dateToString.substring(4, 4 + 3); for (int i = 0; ...

    Date类中的方法.pdf

    Date d = new Date(); ``` 这将创建一个表示当前日期和时间的新`Date`对象。 `Date`类可以与`Calendar`类一起使用,`Calendar`是更高级的日历工具,允许对日期和时间进行更复杂的操作。在上述示例中,`...

    js中toString方法3个作用.docx

    js 中 toString 方法的 3 个作用 js 中的 toString 方法是 Object.prototype 上的一个方法,每个对象都可以调用该方法。该方法的主要作用是将对象转换为字符串形式,以便于对象的表示和处理。在 js 中,toString ...

    C#日期函数所有样式大全

    2. `dt.Date.ToString()`:提取日期部分,不包含时间,如"2005-11-5 0:00:00"。 3. `dt.DayOfWeek.ToString()`:返回星期几,如"Saturday"。 4. `dt.DayOfYear.ToString()`:返回一年中的第几天,如"309"。 5. `dt....

    多种获得当前时间方法

    //获取日期+时间 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 还有更多方法,请下载学习

Global site tag (gtag.js) - Google Analytics