我在使用 Java 格式化日期时遇到问题。日期格式化程序似乎使用 BST(英国夏令时)解析我的字符串,而不是下面代码中 dateStr 字符串中 +0000 定义的 GMT+0。
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 但无济于事。
最佳答案
请注意,Tue Oct 02 02:06:00 BST 2012 与 Tue Oct 02 01:06:00 +0000 2012 是同一时间,只是在不同的时区中表示。 java.util.Date
并不真正处理时区,因此就其而言,没有区别。您构建的 Date 对象表示您想要的正确日期和时间。
Date.toString()
方法本质上只是一个格式化程序,它在其格式设置中使用您的 JRE 默认时区。如果您想测试 Date 对象是否正确,那么您应该构建一个 java.util.Date
对象(使用 java.util.Calendar
- 大多数 Date 构造函数已被弃用)进行测试。如果要创建显示字符串,则应使用已创建的 SimpleDateFormatter
实例来格式化 Date 对象。
如果您确实需要一个存储时区信息的对象,那么您应该使用 java.util.Calendar
。 java.util.Date
几乎已被弃用到无论如何都无法使用的地步。或者,像我一样等待 Java 8 中出现的新数据和时间 API。
关于java - 在 Java 中格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034766/