将日期时间字符串转换为Unix时间戳

时间:2019-03-08 18:26:19

标签: java date time java-7 jodatime

我有一个日期时间字符串,如下所示,它们之间没有空格:

TueDec2618:47:09UTC2017

是否可以将其转换为unix时间戳?日期时间字符串将始终采用该格式。

1 个答案:

答案 0 :(得分:3)

java.time和ThreeTen Backport

comment by ernest_k经过深思熟虑,可以解决您的问题:

    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern("EEEMMMddHH:mm:sszyyyy", Locale.ENGLISH);
    String dateTimeString = "TueDec2618:47:09UTC2017";
    ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString, formatter);
    long unixTimestamp = dateTime.toEpochSecond();
    System.out.println("Parsed date-time " + dateTime + " Unix timestamp " + unixTimestamp);

在Java 1.7.0_79上测试的在ThreeTen Backport 1.3.6上运行的输出是:

  

解析日期时间2017-12-26T18:47:09Z [Zulu] Unix时间戳1514314029

问题:如何在Java 7上使用ZonedDateTime和DateTimeFormatter?

  

我仍然使用Java 7,所以不能使用ZonedDataTime和   DateTimeFormatter,但我可以使用joda库。

的确可以。 java.time只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

虽然Joda-Time是另一个不错的解决方案,但我认为您应该选择ThreeTen Backport而不是Joda-Time(尽管意见分歧)。 Joda-Time主页建议:

  

请注意,Joda-Time被认为是很大程度上“完成”的项目。   没有计划进行重大增强。如果使用Java SE 8,请迁移   到java.time(JSR-310)。

所以java.time似乎是面向未来的解决方案。

链接