如何将 LocalDate 转换为特定的日期时间格式
how to convert LocalDate to a specific date time format
如何将 ISO_LOCAL_DATE 转换为日期时间格式:yyyy-MM-dd'T'HH:mm:ss.SSSZ in java
例如:给定日期:2016-01-25 至 2016-01-25T00:00:00.000+0100
就这么简单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"));
LocalDate 上有多种方法可以做到这一点,包括:
- 本地日期::toDateTimeAtCurrentTime()
- 本地日期::toDateTimeAtStartOfDay()
- LocalDate::toDateTime(本地时间)
- LocalDate::toDateTime( LocalTime , DateTimeZone )
我假设有一个字符串,例如 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_LOCAL_DATE 转换为日期时间格式:yyyy-MM-dd'T'HH:mm:ss.SSSZ in java
例如:给定日期:2016-01-25 至 2016-01-25T00:00:00.000+0100
就这么简单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"));
LocalDate 上有多种方法可以做到这一点,包括:
- 本地日期::toDateTimeAtCurrentTime()
- 本地日期::toDateTimeAtStartOfDay()
- LocalDate::toDateTime(本地时间)
- LocalDate::toDateTime( LocalTime , DateTimeZone )
我假设有一个字符串,例如 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
。只有当你需要给出字符串输出时,比如与另一个系统进行数据交换时,才格式化成需要格式的字符串。