0

我正在尝试使用以下代码将我的机器的日期/时间转换为 GMT 时区:

DateFormat gmtFormat = new SimpleDateFormat("E MMM dd HH:mm:ss 'GMT' yyyy");
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
gmtFormat.setTimeZone(gmtTime);
System.out.println("Orginal Date : " + new Date());
String s= gmtFormat.format(new Date());
System.out.println("Converted Date As String: "+ s);
System.out.println("Converted Date As date object : " + gmtFormat.parse(s));

以上代码输出:

Orginal Date : Mon Apr 21 21:04:06 AST 2014
Converted Date As String: Mon Apr 21 18:04:06 GMT 2014
Converted Date As date object : Mon Apr 21 21:04:06 AST 2014

但是,当我使用 parse 函数将“Converted Date As String”解析为“Converted Date As date object”时出现问题,但您可以注意到日期更改为原始日期

为什么会这样?


当我执行以下操作时,问题就解决了:

DateFormat gmtFormat = new SimpleDateFormat("E MMM dd HH:mm:ss 'GMT' yyyy");
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
gmtFormat.setTimeZone(gmtTime);
System.out.println("Orginal Date : " + new Date());
String s= gmtFormat.format(new Date());
System.out.println("Converted Date As String: "+ s);
// Just I added Local Time Zone Formatand I use it to call parse instead of gmtFormat
DateFormat LocalFormat = new SimpleDateFormat("E MMM dd HH:mm:ss 'GMT' yyyy");
System.out.println("Converted Date As date object : " + LocalFormat.parse(s));

我想知道为什么会这样 >> Local format 如何与 parse Function 相关?有谁知道为什么?

4

1 回答 1

1

from 的返回值DateFormat.parse(String)是 a java.util.Date,它不保留任何有关时区或语言环境的信息。ADate本质上是一个围绕一个long值的包装器对象,该值表示自 1970 年 1 月 1 日格林威治标准时间 00:00 以来的毫秒数。当toString()调用它的方法时,默认实现会在本地系统的默认时区呈现日期。

如果要创建存储时间戳相关时区/语言环境的日期/时间表示,则应创建一个java.util.Calendar对象(使用Calendar.getInstance(...)并为其提供 aTimeZone和/或 a Locale,然后使用Date表示您想要的日期/时间的对象。

于 2014-04-21T18:28:25.993 回答