【问题标题】:convert date time string to unix timestamp将日期时间字符串转换为 unix 时间戳
【发布时间】:2019-07-30 19:48:49
【问题描述】:

我有一个日期时间字符串,就像这样,它们之间没有任何空格:

TueDec2618:47:09UTC2017

有什么方法可以将其转换为 unix 时间戳?日期时间字符串将始终采用该格式。

【问题讨论】:

  • 不要按照建议使用SimpleDateFormat,如果您需要将字符串解析为日期和时间,请使用DateTimeFormatter
  • @ernest_k 我对该字符串的解释是2017-12-26 18:47:09 UTC
  • @JoakimDanielson 是的,上面的时间就是这样。
  • 这应该可以工作:ZonedDateTime.parse("TueDec2618:47:09UTC2017", DateTimeFormatter.ofPattern("EEEMMMddHH:mm:sszyyyy"))。它产生2017-12-26T18:47:09Z[UTC]

标签: java date time java-7 jodatime


【解决方案1】:

java.time 和 ThreeTen 反向移植

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);

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

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

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

我仍在使用 Java 7 顺便说一句,所以不能使用 ZonedDataTimeDateTimeFormatter 但我可以使用 joda 库。

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

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

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

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

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

链接

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2012-06-23
    • 2011-09-23
    • 1970-01-01
    • 2016-12-18
    • 2022-01-21
    相关资源
    最近更新 更多