【问题标题】:Formatting ZonedDateTime for previous years格式化前几年的 ZonedDateTime
【发布时间】:2021-02-23 17:50:30
【问题描述】:

我正在尝试将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'"));

问题是前几年的日期(如本例所示)被作为当前年份返回。

我怎样才能使用相同的格式但考虑到年份?

【问题讨论】:

  • 在使用MonthDayZonedDateTime fomr java.time(现代Java 日期和时间API)时,不要同时混用DateFormatsimpleDateFormatDate,因为它们是出了名的麻烦且过时了,并且您正在进行不必要的转换。 java.time 为您提供所需的所有功能。

标签: java date datetime date-format zoneddatetime


【解决方案1】:
    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 中混合使用旧的、麻烦的日期和时间类充其量是过于复杂了。
  • MonthDay,顾名思义,是月份和月份中的某天,因此不包括年份,这是您丢失它的地方。相反,我使用LocalDate
  • ZonedDateTime.now() 为您提供您自己时区的当前日期和时间,当您想要 UTC 的结果时,这不是您所需要的。取而代之的是 date.atStartOfDay().atOffset(ZoneOffset.UTC) 以 UTC 格式为您提供一天开始的时间。

【讨论】:

  • 非常感谢,这成功了,让事情变得更简单了。
  • 快速提问,我将如何使用您的方法但处理一位数字?例如1/1/20.
  • 我认为只需更改为 DateTimeFormatter.ofPattern("M/d/yy"); 即可解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 2020-11-27
  • 1970-01-01
  • 2020-12-15
  • 2021-09-04
  • 2019-05-07
  • 2019-04-27
相关资源
最近更新 更多