如何将 LocalDate 转换为特定的日期时间格式 [关闭]

问题描述 投票:0回答:3

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

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

java date-formatting java-time localdate isodate
3个回答
3
投票

我假设您有一个字符串,例如

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);

在我的时区(欧洲/哥本哈根)运行时,此示例代码的输出就是您所要求的:

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

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

对于使用

ISO_LOCAL_DATE
进行解析,我们不需要指定格式化程序,因为此格式化程序是
LocalDate.parse()
的默认格式化程序。

综上所述,您通常不应该将日期从一种字符串格式转换为另一种字符串格式。在程序中将日期保存为

LocalDate
对象。当您获得字符串输入时,解析为
LocalDate
。仅当您需要给出字符串输出时,例如与另一个系统交换数据时,才将其格式化为所需格式的字符串。

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


1
投票

LocalDate 上有多种方法可以实现此目的,包括:

  • LocalDate::toDateTimeAtCurrentTime()
  • LocalDate::toDateTimeAtStartOfDay()
  • LocalDate::toDateTime( 本地时间 )
  • LocalDate::toDateTime( LocalTime , DateTimeZone )

0
投票

就这么简单

LocalDateTime localDateTime = yourLocalDate.atStartOfDay()

更新 添加时间戳非常简单:

ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime = zdt = localDateTime.atZone(zoneId);

可以组合成

ZonedDateTime zdt = yourLocalDate.atStartOfDay().atZone(ZoneId.of("America/New_York"));
© www.soinside.com 2019 - 2024. All rights reserved.