java - 在 Java 中格式化日期

标签 java date datetime timestamp

我在使用 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.Calendarjava.util.Date 几乎已被弃用到无论如何都无法使用的地步。或者,像我一样等待 Java 8 中出现的新数据和时间 API。

关于java - 在 Java 中格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034766/

相关文章:

Java字符串比较与正则表达式的区别?

java - Twitch Api - 不允许授予密码

java - 在 Java 中以 HTTP 格式获取日期

sql - 为什么即使用户登录的日期格式设置设置为 'yyyy-mm-dd',ISO 8601 日期格式 'mdy' 字符串文字仍然有效

c# - 如何使用日期时间列类型将日期时间选择器默认值插入到MYSQL?

java - 从java中的RestController返回多种(xml和json)格式

java - 无法连接到 Sybase 数据库

Javascript 获取数组中的连续日期

.net - Get-Date 转换为字符串 vs ToString()

php - 日期时间列上特定年份内的 Mysql 结果