2014-01-10 187 views
1

我在使用Java格式化日期时遇到问题。日期格式化程序似乎使用BST(英国夏令时)分析我的字符串,而不是以下代码中dateStr字符串中+0000定义的GMT + 0。格式化日期为Java

String dateStr = "Tue Oct 02 01:06:00 +0000 2012"; 
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"); 
Date date = df.parse(dateStr); 

// Test the date   
System.out.println(date.toString()); 

当我运行上面的代码我得到:

Tue Oct 02 02:06:00 BST 2012 

这显然不是我想要的。一个有用的信息点可能是,当我运行以下命令:

System.out.println(TimeZone.getDefault().getDisplayName()); 

我得到:

Greenwich Mean Time 

我试图让输出是

Tue Oct 02 01:06:00 GMT 2012 

我已经已经在df上尝试过.setTimeZone,但无济于事。

+0

您的意思是在您的预期输出中说GMT吗?你说BST似乎与你的讨论相矛盾。 –

+0

Woops。是!编辑它。 –

回答

1

.toString()方法在打印日期时使用您的语言环境。

用途:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"); 
format.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println(format.format(date)); 
0

据我所知,BST在SE已经过时7.

0

你可以尝试喜欢这里:

DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", 
       Locale.CANADA); 

本地ARGS添加到SimpleDateFormat构造

2

请注意,Tue Oct 02 02:06:00 BST 2012与Tue Oct 01 01:0 2012年6:00 +0000,刚刚在不同的时区表示。 java.util.Date并不真正处理时区,因此就其而言,没有区别。您构建的Date对象代表您想要的正确日期和时间。

Date.toString()方法本质上只是一个格式化程序,它在其格式中使用您的JRE默认TimeZone。如果要测试Date对象是否正确,则应该构建一个java.util.Date对象(使用java.util.Calendar - 大多数Date构造函数已被弃用)进行测试。如果你想创建一个显示字符串,那么你应该使用已经创建的SimpleDateFormatter实例来格式化Date对象。

如果确实需要存储TimeZone信息的对象,则应使用java.util.Calendar。无论如何,java.util.Date几乎不推荐使用。或者,照我所做的一样,等待Java 8中出现新的Data and Time API。