【问题标题】:Date time issue, returning one day less日期时间问题,返回少一天
【发布时间】:2014-04-16 08:23:52
【问题描述】:

下面的代码返回的时间比我通过的少一天,为什么它返回的时间比“Fri Aug 27 13:00:00 PDT 2010”少一天。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;

   Locale locale = new Locale("en", "US");
   SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", locale);
   TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT-4");

   dateFormat.setTimeZone(timeZone);

   System.out.println(dateFormat.parse("2010-08-28"));

【问题讨论】:

标签: java


【解决方案1】:

输出奇怪的原因是你的系统时区。

例如,在我的系统上,我正在使用UTC+2 并且您的代码打印出来

Fri Aug 27 23:00:00 BST 2010

如果我将系统时区更改为UTC 我会得到

Fri Aug 27 21:00:00 BST 2010

这会使输出产生两个小时的差异。

因此,似乎正在发生的事情是 UTC-4 中的日期 00:00, 28 Aug 2010 被计算为系统设置中指定的时区,然后在终端中打印。

【讨论】:

  • 谢谢你的回答,但是解析TimeZone时设置时区有什么用呢 timeZone = TimeZone.getTimeZone("Etc/GMT-4"); dateFormat.setTimeZone(timeZone);
  • 由于 2010 年 8 月 27 日是夏季,它打印 21:00 而不是 20:00
【解决方案2】:

输出将取决于您系统的时区。您正在解析的内容本质上是 GMT-4 时区的 2010-08-28 00:00:00。当你打印它时,它会在你的系统时区显示这个时间。

【讨论】:

    【解决方案3】:

    查看Fri Aug 27 13:00:00 PDT 2010 的时间?现在是太平洋夏令时间 13:00,所以我建议您使用具有目标时区的专用 SimpleDateFormat 进行打印...

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2011-11-05
      • 2014-03-05
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多