如何使用" DateFormat"将String转换为Date对象?

时间:2014-04-21 18:11:06

标签: java datetime java.util.date

我正在尝试使用以下代码将我的机器的日期/时间转换为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

但是,当我使用解析函数解析“转换日期为字符串”到“转换日期为日期对象”时,我的问题,但您可以注意到日期更改为原始日期

为什么会这样?


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

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));

我想知道为什么会发生这种情况>>本地格式如何与解析函数相关?有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

DateFormat.parse(String)的返回值为java.util.Date,不会保留有关时区或区域设置的任何信息。 Date本质上是围绕long值的包装器对象,表示自1970年1月1日格林尼治标准时间00:00以来的毫秒数。调用其toString()方法时,默认实现会在本地系统的默认时区中呈现日期。

如果要创建存储时间戳关联时区/区域设置的日期/时间表示,则应创建java.util.Calendar对象(使用Calendar.getInstance(...)并为其提供TimeZone和/或Locale,然后设置与日历关联的时间,其中Date对象代表您想要的日期/时间。