【问题标题】:Date time parsing in JavaJava中的日期时间解析
【发布时间】:2013-03-12 10:46:49
【问题描述】:

鉴于此代码...

 String date = "11:00 AM";

 SimpleDateFormat sdf = new SimpleDateFormat("h:mm a");

 sdf.setTimeZone(TimeZone.getTimeZone("US/Eastern")); // --> should be GMT-4

 TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

 Date parse = sdf.parse(date); // -- gives Thu Jan 01 16:00:00 GMT 1970

为什么日期解析给我的是 16:00 而不是 15:00?

【问题讨论】:

  • 美国东部标准时间上午 11:00 是格林威治标准时间的 16:00。所以输出是正确的,更多信息在这里:wwp.greenwichmeantime.in/to/est/index.htm
  • 那是因为 US/EasternGMT-5 而不是 GMT-4

标签: java date timezone


【解决方案1】:

您不能只使用java.util.Date 来存储时间。它将分配 1970 年,这在某些情况下是不正确的。我建议使用org.joda.time.LocalTime

【讨论】:

    【解决方案2】:

    还要考虑夏令时。这应该会满足您的期望

    sdf.setTimeZone(TimeZone.getTimeZone("EST5EDT"));

    【讨论】:

      【解决方案3】:

      如果您默认不提供任何日期部分,则会为其分配默认的Epoche standard date(01 Jan 1970 00:00 Hours,称为Epoche standard time,并将所有与时间相关的计算作为基准时间来衡量)。

      java.util.Date 类的getTime() 方法返回给定date(including time also)Epoche standard( 01 Jan 1970 00:00 Hours) 之间的总毫秒数。 虽然您没有使用 getTime() 方法,但它在这里无关紧要。 所以很简单,你得到了那个时间。 根据格林威治标准时间,这是正确的。

      我认为它会对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-26
        • 2017-08-03
        • 2017-09-26
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多