我将使用String
和-
以及:
20170609T184237Z
什么是最好的方式
我能想到的唯一方法是创建一个DateTime
对象,然后从那里将其转换为毫秒,然后再转换为String
。还有更好的方法吗?
答案 0 :(得分:2)
我假设您的意思是没有 -
和:
。不,您解析为适当的日期时间对象并转换为毫秒的方式是好的和标准的,没有什么更好的。
您打算使用Joda-Time吗?你可能想再想一想。 Joda-Time主页说
请注意,Joda-Time被认为是一个很大程度上“完成”的项目。 没有计划重大改进。如果使用Java SE 8,请迁移 到
java.time
(JSR-310)。
JSR-310也被反向移植到Java 6和7,因此我建议使用该移植优先于Joda-Time。
以下内容可能超出您的要求。我建议使用一种方法:
/**
*
* @param dateTimeString String in 20170609T184237Z format
* @return milliseconds since the epoch as String
* @throws IllegalArgumentException if the String is not in the correct format
*/
private static String isoToEpochMillis(String dateTimeString) {
try {
OffsetDateTime dateTime = OffsetDateTime.parse(dateTimeString,
DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmssX"));
if (! dateTime.getOffset().equals(ZoneOffset.UTC)) {
throw new IllegalArgumentException("Offset is not Z");
}
return String.valueOf(dateTime.toInstant().toEpochMilli());
} catch (DateTimeException dte) {
throw new IllegalArgumentException("String is not in format uuuuMMddTHHmmssZ",
dte);
}
}
我们这样称呼它:
String milliseconds = isoToEpochMillis("20170609T184237Z");
System.out.println(milliseconds);
打印
1497033757000
我不知道您想要的验证有多严格。您的示例字符串包含Z
个时区;如您所见,我需要UTC时区,但也会接受20170609T184237+00
。如果必须为Z
,我认为您需要使用dateTimeString.endsWith("Z")
。