格式化前几年的 ZonedDateTime
Formatting ZonedDateTime for previous years
我正在尝试将 MM/dd/YY
格式化为 uuuu-MM-dd'T00:00:00Z
。
我有以下代码。
String dateTime = "12/10/20";
DateFormat df = new SimpleDateFormat("MM/dd/yy");
Date date;
date = df.parse(dateTime); // Thu Dec 10 00:00:00 EST 2020
String dateStr = df.format(date); // 12/10/20
MonthDay monthDay = MonthDay.parse(dateStr, DateTimeFormatter.ofPattern("MM/dd/yy")); // --12-10
ZonedDateTime newDate = ZonedDateTime.now().with(monthDay); // 2021-12-10T12:34:21.214-05:00[US/Eastern]
String formattedDate = newDate.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T00:00:00Z'"));
问题在于前几年的日期(如本例中)被返回为当前年份。
如何使用相同的格式但考虑年份?
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yy");
String dateTime = "12/10/20";
LocalDate date = LocalDate.parse(dateTime, formatter);
OffsetDateTime newDateTime = date.atStartOfDay().atOffset(ZoneOffset.UTC);
System.out.println(newDateTime);
到目前为止的输出:
2020-12-10T00:00Z
如果您也需要输出 00 秒,请使用第二个格式化程序:
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
String formattedDateTime = newDateTime.format(outputFormatter);
System.out.println(formattedDateTime);
2020-12-10T00:00:00Z
从这里带走积分:
- java.time,现代 Java 日期和时间 API,为您提供所需的所有功能。混入 Java 1.0 和 1.1 中旧的和麻烦的日期和时间 类 充其量是过于复杂了。
- A
MonthDay
,顾名思义,是一个月和一个月的一天,所以不包括年,这是你失去它的地方。相反,我使用 LocalDate
.
ZonedDateTime.now()
为您提供您所在时区的当前日期和时间,这不是您想要 UTC 格式结果时所需要的。相反,date.atStartOfDay().atOffset(ZoneOffset.UTC)
以 UTC 为您提供一天开始的时间。
我正在尝试将 MM/dd/YY
格式化为 uuuu-MM-dd'T00:00:00Z
。
我有以下代码。
String dateTime = "12/10/20";
DateFormat df = new SimpleDateFormat("MM/dd/yy");
Date date;
date = df.parse(dateTime); // Thu Dec 10 00:00:00 EST 2020
String dateStr = df.format(date); // 12/10/20
MonthDay monthDay = MonthDay.parse(dateStr, DateTimeFormatter.ofPattern("MM/dd/yy")); // --12-10
ZonedDateTime newDate = ZonedDateTime.now().with(monthDay); // 2021-12-10T12:34:21.214-05:00[US/Eastern]
String formattedDate = newDate.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T00:00:00Z'"));
问题在于前几年的日期(如本例中)被返回为当前年份。
如何使用相同的格式但考虑年份?
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yy");
String dateTime = "12/10/20";
LocalDate date = LocalDate.parse(dateTime, formatter);
OffsetDateTime newDateTime = date.atStartOfDay().atOffset(ZoneOffset.UTC);
System.out.println(newDateTime);
到目前为止的输出:
2020-12-10T00:00Z
如果您也需要输出 00 秒,请使用第二个格式化程序:
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
String formattedDateTime = newDateTime.format(outputFormatter);
System.out.println(formattedDateTime);
2020-12-10T00:00:00Z
从这里带走积分:
- java.time,现代 Java 日期和时间 API,为您提供所需的所有功能。混入 Java 1.0 和 1.1 中旧的和麻烦的日期和时间 类 充其量是过于复杂了。
- A
MonthDay
,顾名思义,是一个月和一个月的一天,所以不包括年,这是你失去它的地方。相反,我使用LocalDate
. ZonedDateTime.now()
为您提供您所在时区的当前日期和时间,这不是您想要 UTC 格式结果时所需要的。相反,date.atStartOfDay().atOffset(ZoneOffset.UTC)
以 UTC 为您提供一天开始的时间。