Java 以正确的格式将LocalDate解析为ZonedDateTime
鉴于: 和输出:Java 以正确的格式将LocalDate解析为ZonedDateTime,java,java-time,datetimeformatter,Java,Java Time,Datetimeformatter,鉴于: 和输出: public static void main(String[] args) { String dateString = "2018-07-30T13:36:17.820"; DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); LocalDat
public static void main(String[] args) {
String dateString = "2018-07-30T13:36:17.820";
DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
LocalDate date = LocalDate.parse(dateString, DATE_TIME_FORMATTER);
ZonedDateTime zonedDateTime = date.atStartOfDay((ZoneOffset.UTC));
System.out.println(zonedDateTime);
}
…打印秒的模式是什么?这个愚蠢的问题无疑让我有点发疯
我需要:
2018-07-30T00:00Z
LocalDate只保留日期。您需要解析LocalDateTime并转换为ZonedDateTime,这样您就有了预期的秒数
2018-07-30T00:00:00Z
我将java.time.LocalDate更改为java.time.LocalDateTime,如果还想显示秒数,就需要它
var dateString = "2018-07-30T13:36:17.820";
var format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
var localDate = LocalDateTime.parse(dateString, format);
var zone = ZoneId.of( "America/Montreal" );
var zonedDateTime = localDate.atZone(zone);
System.out.println(zonedDateTime);
输出为:
package com.test;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class DateFormatter {
public static void main(String[] args) {
String dateString = "2018-07-30T13:36:17.820";
DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
LocalDateTime date = LocalDateTime.parse(dateString, DATE_TIME_FORMATTER);
ZonedDateTime zonedDateTime = date.atZone(ZoneOffset.UTC);
System.out.println(zonedDateTime);
}
}
您必须执行以下几个步骤:
- 将
解析为字符串
,因为它包含日期和时间LocalDateTime
- 只提取日期
- 通过添加一天的开始时间(
=LocalTime.MIN
)和一个00:00:00
ZoneOffset.UTC
publicstaticvoidmain(字符串[]args){
String dateString=“2018-07-30T13:36:17.820”;
//解析LocalDateTime
LocalDateTime LocalDateTime=LocalDateTime.parse(dateString);
//提取日期部分
LocalDate LocalDate=localDateTime.toLocalDate();
//通过应用ZoneId将其设置为ZoneDateTime
ZonedDateTime ZonedDateTime=ZonedDateTime.of(localDate,LocalTime.MIN,ZoneOffset.UTC);
//打印结果
System.out.println(zonedDateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
}
输出为
2018-07-30T00:00:00Z
有几种方法可以做到这一点,这只是其中之一,它与大多数其他答案(和评论:-)略有不同。tl;博士
你在错误的地方使用了错误的东西
2018-07-30T13:36:17.820
不需要明确的DateTimeFormatter
,因为它已经采用了默认格式。而且,这个字符串有日期和时间,而不仅仅是日期;因此,将其解析为LocalDateTime
而不是LocalDate
更有意义。您始终可以使用从LocalDateTime
获取LocalDate
DateTimeFormatter
2018-07-30T13:36:17.820Z
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String args[]) {
String dateString = "2018-07-30T13:36:17.820";
LocalDateTime localDateTime = LocalDateTime.parse(dateString);// You do not need a DateTimeFormatter here
ZonedDateTime zonedDateTime = localDateTime.toLocalDate().atStartOfDay(ZoneOffset.UTC);
// Print zonedDateTime.toString()
System.out.println(zonedDateTime);
// Custom format
final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
System.out.println(DATE_TIME_FORMATTER.format(zonedDateTime));
}
}
输出:
2018-07-30T13:36:17.820Z
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String args[]) {
String dateString = "2018-07-30T13:36:17.820";
LocalDateTime localDateTime = LocalDateTime.parse(dateString);// You do not need a DateTimeFormatter here
ZonedDateTime zonedDateTime = localDateTime.toLocalDate().atStartOfDay(ZoneOffset.UTC);
// Print zonedDateTime.toString()
System.out.println(zonedDateTime);
// Custom format
final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
System.out.println(DATE_TIME_FORMATTER.format(zonedDateTime));
}
}
从了解有关现代日期时间API的更多信息,只需使用
日期时间格式
。您清楚地知道如何使用它…还请注意,如果您只想将ZDT的时间部分设置为00:00,您可以使用truncatedTo(ChronoUnit.DAYS)
。无需首先解析到LocalDate
。谢谢,我就快到了,只是看不见:)@Steerpike hehe,没问题。请考虑所有有用的答案,包括已接受的答案。