java - 解析来自不同时区的时间戳字符串

标签 java jodatime

我有一个带有 GMT 时间戳的字符串。我想将其转换为 EST 中的 DateTime 对象。 例如,如果字符串有:
final String gmtTime = "20140917-18:55:25"; // 4:55 PM GMT
我需要将其转换为:20140917-12:55:25//12:55 PM EST

所有这些尝试都失败了:

    System.out.println("Time in GMT " + DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss").parseDateTime(gmtTime));

    System.out.println("Time in EST " +
    DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss").parseDateTime(gmtTime).withZone(DateTimeZone.forID("America/New_York")));

输出: GMT 时间 2014-09-17T18:55:25.000-04:00 美国东部时间 2014-09-17T18:55:25.000-04:00//我预计:2014-09-17T12:55:25.000-04:00

有什么建议吗?

最佳答案

Joda Time

这里是Joda-Time 2.4解决方案:

String gmtTime = "20140917-18:55:25";
DateTime dateTimeGMT =
    DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss").withZoneUTC().parseDateTime(gmtTime);
System.out.println("Time in GMT " + dateTimeGMT); // Time in GMT 2014-09-17T18:55:25.000Z

System.out.println(
    "Time in EST "
    + DateTimeFormat.forPattern("yyyyMMdd-HH:mm:ss").withZone(
        DateTimeZone.forID("America/New_York")
    ).print(dateTimeGMT)
); //Time in EST 20140917-14:55:25

我认为您对结果的期望是错误的。 EST(更正确的用法是“America/New_York”,如 zone identifier )比 UTC 晚四个小时,因此本地时间戳比 UTC 偏移处同一时刻的本地表示早四个小时。

另请注意,我在格式化程序上设置时区,而不是在解析的 DateTime 对象上设置时区。

关于java - 解析来自不同时区的时间戳字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934321/

相关文章:

java - 包含日期范围检查在 Joda 时间

java - 如何在 Controller 中捕获 java.lang.NumberFormatException.forInputString 异常?

java - 可以在 quartz 中使用不同的触发器运行相同的作业吗?

java - 在 Intellij 之外运行 Camel 时,HttpServletRequest 转换失败

java - JPA:为什么注释应用于 getter 或字段

java - 某些情况下的 Joda-Time Period 问题

java - 如何使用 thenReturn 上课?

当 joda-time 达到闰日时,jvm 去优化会占用 CPU

datetime - 如何在 Java 中将 ZoneId 转换为 DateTimeZone

oracle - 将Joda DateTime映射到Grails中的Oracle Timestamp