簡體   English   中英

格式化前幾年的 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);

Output 到目前為止:

2020-12-10T00:00Z

如果您也需要 00 秒為 output,請使用第二個格式化程序:

    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 為您提供一天開始的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM