更改日期格式

问题描述

我有以下代码

// OLD DATE
String date = "Mon,06/07";

DateFormat df = new SimpleDateFormat("MM/dd");
String strDate = date.substring(date.length() - 5);
Date dateOld;
try {
    dateOld = df.parse(strDate);
} catch (Exception e) {
    e.printstacktrace();
}
String dateStr = df.format(dateOld);
MonthDay monthDay = MonthDay.parse(dateStr,DateTimeFormatter.ofPattern("MM/dd"));
zoneddatetime dateNew = zoneddatetime.Now().with(monthDay);

// NEW DATE
System.out.println(dateNew.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T00:00:00Z'")));

基本上我想要做的是将 Mon,06/07 格式更改为此格式 2021-06-07T00:00:00Z

我所拥有的东西有效,但它真的很糟糕。什么是更好的方法

解决方法

这有点棘手,因为您需要做出一些假设

  • 年份,因为它没有以原始格式指定
  • 时区,因为它根本没有指定(最终输出似乎指向 UTC)

您需要做的第一件事是将 String 输入解析为 LocalDate(您可以直接转到 ZonedDate,但这是我开始的地方)

String date = "Mon,06/07";
DateTimeFormatter parseFormatter = new DateTimeFormatterBuilder()
        .appendPattern("E,M/d")
        .parseDefaulting(ChronoField.YEAR,2021)
        .toFormatter(Locale.US);

LocalDate ld = LocalDate.parse(date,parseFormatter);

然后您需要将其转换为 LocalDateTime

LocalDateTime ldt = ld.atStartOfDay();

然后,到 ZonedDateTime。这里'我假设UTC

//ZoneId zoneId = ZoneId.systemDefault();
//ZonedDateTime zdt = ldt.atZone(zoneId);
OffsetDateTime zdt = ldt.atOffset(ZoneOffset.UTC);

最后,将结果格式化为您想要的格式

String formatted = zdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
System.out.println(formatted);

对我来说,打印...

2021-06-07T00:00:00Z

在新的日期/时间 API 上投入了大量时间和精力,您应该花时间尽可能地尝试和学习它们(我很生疏,但稍加修改,就得到了结果)

也许以 Date/Time trails 开头

,

解决方案使用 /etc/init.d/jira startCalendarDate

SimpleDateFormat