Java,以微秒为单位的奇怪时间戳格式?

标签 java

如何将以下时间戳“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/

相关文章:

java - 这段代码哪里失败了?两种方法之间的区别

java - 在 Time4j 中迭代给定范围的重复时间戳

java - 小程序能做什么和不能做什么

java - Android 像素完美对齐

java spring boot HTTP POST 请求不起作用

java - "Trickiness"从 Java 调用 Scala 代码?

Java、安卓: Activity not found exception when exporting

java - 我怎样才能在java中获得这个日期时间格式

java - 在 Struts 2 中看不到对象列表?

java - 使用 Graphics2D 在 BufferedImage 上叠加文本并返回 BufferedImage