Java SimpleDateFormat 解析后时区错误

标签 java date timezone

为什么:当我输入带有 GMT 时区的日期字符串时,SimpleDateFormat 会解析它并输出 EET 时区?

public static String DATE_FORMAT="dd MMM yyyy hh:mm:ss z";
public static String CURRENT_DATE_STRING ="31 October 2011 11:19:56 GMT";
...
SimpleDateFormat simpleDateFormat =  new SimpleDateFormat(DATE_FORMAT, Locale.US);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(simpleDateFormat.parseObject(CURRENT_DATE_STRING));

输出是:

Mon Oct 31 13:19:56 EET 2011

而不是

Mon Oct 31 13:19:56 GMT 2011

最佳答案

您正在打印 Date.toString() 的结果。 Date 没有任何时区的概念 - 它只是自 UTC Unix 纪元以来的毫秒数。 Date.toString() 始终 使用系统默认时区。

请注意,您不应期待“Mon Oct 31 13:19:56 GMT 2011”,因为您指定的 GMT 时间是 11 点,而不是 13 点。

如果要使用特定时区进行打印,则应使用另一个DateFormat 进行打印,而不是使用Date.toString()。 (Date.toString() 一直造成这样的困惑;这真的很不幸。)

关于Java SimpleDateFormat 解析后时区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7952686/

相关文章:

date - 日期的 Flutter TextField 输入验证

node.js - 处理 UTC 日期和 future

python - 接受 Django 形式的日期时间 isoformat

php - 将 PHP 中的所有日期转换为本地时间

java - aws s3 withRegion : Cannot resolve method 'withRegion(com.amazonaws.regions.Regions)'

java Android - volley 库 - 通过 ImageLoader 获取位图

java - 如果数组中没有值,则出现空点异常

Java索引越界异常与dijkstra算法

typescript - 使用 Prisma ORM 检索日期(仅)列作为字符串或映射到字符串而无需时间

git - Git 如何解析日期字符串?