如何将以下时间戳“2012-02-22T16:46:28.9870216+00:00”转换为Java可读和可处理的时间戳而不损失任何准确性?它的数据格式是什么?例如,关于我的目标,我收到 2 条消息,读取每条消息中的时间戳(如上面示例中所写),比较两个时间戳以确定它们之间哪个是旧的
注意到下面的问题与我需要的不符,他们所说的时间戳格式与 2012-02-22T16:46:28.9870216+00:00 不同,我不知道。 Converting ISO 8601-compliant String to java.util.Date
最佳答案
你可以用这个 format 来解析它:DateTimeFormatter.ISO_OFFSET_DATE_TIME
。
public static void main(String[] args) throws IOException {
String str = "2012-02-22T16:46:28.9870216+00:00";
DateTimeFormatter dtf = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
System.out.println(dtf.parse(str));
}
如果运行此代码,您将在控制台上看到:
{OffsetSeconds=0, InstantSeconds=1329929188},ISO resolved to 2012-02-22T16:46:28.987021600
更新:
以下是更新后的响应,展示了如何将字符串转换为 LocalDateTime
并允许进行日期比较:
public static void main(String[] args) throws IOException {
String str = "2012-02-22T16:46:28.9870216+00:00";
DateTimeFormatter dtf = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
LocalDateTime lds = LocalDateTime.parse(str, dtf);
System.out.println(lds);
String str2 = "2012-02-22T16:46:28.9970430+00:00";
String str3 = "2012-02-22T16:46:29.0270266+00:00";
LocalDateTime lds2 = LocalDateTime.parse(str2, dtf);
LocalDateTime lds3 = LocalDateTime.parse(str3, dtf);
System.out.println(lds2.compareTo(lds3));
System.out.println(lds3.compareTo(lds2));
}
更新2:
如果您想以这种格式打印日期,则必须使用java.time.OffsetDateTime
,如下所示:
public static void main(String[] args) throws IOException {
OffsetDateTime now = OffsetDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
System.out.println(dtf.format(now));
}
打印出:
2018-03-18T16:46:46.715Z
关于Java,以微秒为单位的奇怪时间戳格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348860/