首页 > 解决方案 > 如何将 LocalDate 转换为特定的日期时间格式

问题描述

如何将 ISO_LOCAL_DATE 转换为日期时间格式:yyyy-MM-dd'T'HH:mm:ss.SSSZ in java

例如:给定日期:2016-01-25 到 2016-01-25T00:00:00.000+0100

标签: javadate-formattingjava-timelocaldateisodate

解决方案


我假设有一个字符串,例如2016-01-25,并且您想要一个包含 JVM 默认时区中一天开始的字符串(从问题中不清楚)。我首先为您想要的格式定义一个格式化程序(它是 ISO 8601):

private static DateTimeFormatter formatter
        = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSxx");

现在您的转换进行了:

    String isoLocalDateString = "2016-01-25";
    LocalDate date = LocalDate.parse(isoLocalDateString);
    ZonedDateTime dateTime = date.atStartOfDay(ZoneId.systemDefault());
    String dateTimeString = dateTime.format(formatter);
    System.out.println(dateTimeString);

在我的时区 Europe/Copenhagen 运行时,此示例代码的输出是您所要求的:

2016-01-25T00:00:00.000+0100

在夏令时 (DST) 从一天的第一刻开始的极少数情况下,一天中的时间不会是 00:00:00.000。

对于解析,ISO_LOCAL_DATE我们不需要指定格式化程序,因为此格式化程序是LocalDate.parse().

综上所述,您通常不应该将日期从一种字符串格式转换为另一种字符串格式。在您的程序中,将日期作为LocalDate对象保存。当您获得字符串输入时,解析为LocalDate. 只有当你需要给出字符串输出时,例如在与另一个系统进行数据交换时,才格式化成所需格式的字符串。

链接: 维基百科文章:ISO 8601


推荐阅读