首页 > 解决方案 > JAVA - 将字符串日期解析为长

问题描述

2024-01-01T00:00:00.000Z

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

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

但它不起作用。

标签: android-studiodatetimesimpledateformatiso8601

解决方案


java.time

java.util日期时间 API 及其格式化 API已SimpleDateFormat过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *

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

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 8601DateTimeFormatter ,只要日期时间字符串符合 ISO 8601 标准,就不需要明确使用对象。

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

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

使用以下格式:

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

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


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


推荐阅读