【发布时间】:2021-08-24 16:47:43
【问题描述】:
为了使用 junit 进行比较,我必须转换日期。我从数据库中得到一个日期,即“06/25/2021 10:26:33.0”,我必须将其转换为“2021-06-25T10:26:33.000-04: 00" 在我在断言中使用它之前。
我试图不在 java 中使用 SimpleDate,而是使用内置的 java.time。但是,我认为我并没有真正理解其中的所有内容。这是我一直在玩的代码 sn-p。我已经尝试了很多方法,但解析发生时总是出错。
public String test() throws ParseException {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime ldt = LocalDateTime.parse("06/25/2021 10:26:33.0", dtf);
//After the above line I have a date like: 2021-06-25T10:26:33.0
ZoneId zone = ZoneId.of("UTC-04:00");
ZonedDateTime zdt = ldt.atZone(zone);
Instant instant = zdt.toInstant();
return instant.toString();
}
在我看来,我认为我必须首先将日期转换为“可接受”的格式,因为我觉得这种格式的字符串 - “yyyy-MM-dd HH:mm:ss.S”不是那种java.time 可以处理。它给了我一个错误,例如“无法在索引 19 处解析文本”,然后可能在第二遍中将其转换为“2021-06-25T10:26:33.000-04:00” ”。
我已经在 SO 上查阅了几篇关于此的文章,但未能找到有助于转换自定义格式的内容。我知道“解析”和“格式”是必须在此处使用的 2 个 API 方法,但不知道如何去做。有人可以将我推向正确的方向吗?
【问题讨论】:
-
困惑...您使用与输入字符串完全不同的格式
-
不要从数据库中获取您的日期和时间作为字符串。检索
LocalDateTime(如果您无法检索OffsetDateTime)。见the good answer by Arvind Kumar Avinash here。
标签: java datetime iso8601 java.time.instant