【发布时间】:2020-03-02 21:45:30
【问题描述】:
我正在尝试在 Java 中格式化输入日期,在调试器中如下所示。
result = {Date@13861} "2019-09-29"
fastTime = 1569729600000
cdate = {Gregorian$Date@13873} "2019-09-29T00:00:00.000-0400"
我需要将其转换为:2019-09-28 20:00:00.0。
我的代码:
DateTimeFormatter dateTimeformatter_Test = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
LocalDate tempDate = LocalDate.parse(date.toString(), DateTimeFormatter.ofPattern( "yyyy-MM-dd" , Locale.US ));
但下面的行会引发运行时错误:Unsupported field: HourOfDay
String result= tempDate.format(dateTimeformatter_Test);
请问我在这里错过了什么?
谢谢。
【问题讨论】:
-
请提供一个minimal reproducible example 来重现确切的错误。我们应该能够复制代码并自己运行它,而不会出现您所询问的错误之外的任何其他错误。
-
date.toString()是个坏主意,因为格式未指定并且可能会更改。看起来您有java.util.Date和java.util.Calendar。LocalDate也没有时间概念,因此您需要提供一些方法来注入它(即LocalDate到LocalDateTime:/) -
我认为您的区域偏移量错误,因为
2019-09-29T00:00:00.000-0400与2019-09-29 04:00:00UTC 时间相同,而不是2019-09-28 20:00:00.0,所以除非您在America/New_York时区和目标时区-08:00(America/Anchorage),你的价值观没有意义。 -
我觉得你说的不是parse而是format?! 解析是将字符串转换为内部形式,在本例中为日期时间对象。 格式化是相反的转换。请清楚你在追求哪一个?
-
你还需要这种格式做什么?询问是因为它可疑地看起来像一个 SQL 时间戳,并且您不应该将时间戳作为字符串传递给您的 SQL 数据库。通过
OffsetDateTme、Instant或LocalDateTime。
标签: java date-formatting date