问题描述
// 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 start
、Calendar
和 Date
SimpleDateFormat