【问题标题】:JAVA - Parse String date to long [duplicate]JAVA - 将字符串日期解析为长 [重复]
【发布时间】:2021-10-16 14:15:38
【问题描述】:
2024-01-01T00:00:00.000Z

我想在 ms(long) 中得到这个字符串 我试过了:

long res = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(createdAt).getTime();

但它不起作用。

【问题讨论】:

  • It doesn't work 不是错误描述。
  • 您正在使用糟糕的日期时间类,这些类现在已经过时了。 DateSimpleDateFormat 几年前被 JSR 310 中定义的现代 java.time 类所取代。

标签: android-studio datetime simpledateformat iso8601


【解决方案1】:

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*

使用现代日期时间 API java.time 的解决方案:

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        long res = Instant.parse("2024-01-01T00:00:00.000Z").toEpochMilli();
        System.out.println(res);
    }
}

输出:

1704067200000

ONLINE DEMO

请注意,现代日期时间 API 基于 ISO 8601,只要日期时间字符串符合 ISO 8601 标准,就不需要明确使用 DateTimeFormatter 对象。

Trail: Date Time 了解有关现代日期时间 API 的更多信息。

出于任何原因,如果您想使用SimpleDateFormat

使用以下格式:

yyyy-MM-dd'T'HH:mm:ss.SSSXXX

查看SimpleDateFormat 文档以了解ZX 之间的区别。


* 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring。请注意,Android 8.0 Oreo 已经提供了support for java.time

【讨论】:

  • 好的答案,当然。我建议在简单的Instant.parse("2024-01-01T00:00:00.000Z").toEpochMilli() 之上添加一个摘要。
  • 感谢@BasilBourque 一如既往地提供宝贵的反馈。但是,SO 上的每个人都知道,可能没有其他人像您一样完善将摘要放在顶部的艺术。随时可以随时编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2012-06-10
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多