将SQL时间戳转换为Java OffsetDateTime

问题描述

我需要在Java中将一些时间戳转换为OffsetDateTime。例如,我有以下时间:

2020-07-31 13:15:00.000000000 -03:00

我应该使用SimpleDateFormat来格式化此格式还是其他一些更简单的帮助程序?

解决方法

您需要使用DateTimeFormattermodern date-time classes的解析和格式化API),如下所示:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        OffsetDateTime odt = OffsetDateTime.parse("2020-07-31 13:15:00.000000000 -03:00",DateTimeFormatter.ofPattern("u-M-d H:m:s.n ZZZZZ"));
        System.out.println(odt);
    }
}

输出:

2020-07-31T13:15-03:00

请查看DateTimeFormatter的文档以获取更多详细信息。您还可以检查 Trail: Date Time ,以了解有关现代日期时间API的更多信息。

注意java.util日期时间类已过时且容易出错,其格式API SimpleDateFormat也是如此。您应该完全停止使用它们。此外,OffsetDateTime是现代日期时间API的一部分,SimpleDateFormat不适合它。

如果您正在为自己的Android项目执行此操作,并且您的Android API级别仍不符合Java-8,请选中Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project