JAVA - 将字符串日期解析为长
JAVA - Parse String date to long
2024-01-01T00:00:00.000Z
我想在 ms(long) 中获取这个字符串
我试过了:
long res = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(createdAt).getTime();
但是没用。
java.time
java.util
日期时间 API 及其格式 API、SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern 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
请注意,现代日期时间 API 基于 ISO 8601 并且不需要明确使用 DateTimeFormatter
对象,只要日期时间字符串符合 ISO 8601个标准。
了解有关现代日期时间 API 的更多信息
出于任何原因,如果您想使用 SimpleDateFormat
:
使用以下格式:
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
查看 SimpleDateFormat
文档以了解 Z
和 X
之间的区别。
* 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring. Note that Android 8.0 Oreo already provides support for java.time
。
2024-01-01T00:00:00.000Z
我想在 ms(long) 中获取这个字符串 我试过了:
long res = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(createdAt).getTime();
但是没用。
java.time
java.util
日期时间 API 及其格式 API、SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern 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
请注意,现代日期时间 API 基于 ISO 8601 并且不需要明确使用 DateTimeFormatter
对象,只要日期时间字符串符合 ISO 8601个标准。
出于任何原因,如果您想使用 SimpleDateFormat
:
使用以下格式:
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
查看 SimpleDateFormat
文档以了解 Z
和 X
之间的区别。
* 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring. Note that Android 8.0 Oreo already provides support for java.time
。