如何将日期类转换为正确解析日期时间? [复制]
Posted
技术标签:
【中文标题】如何将日期类转换为正确解析日期时间? [复制]【英文标题】:How do I convert date class to parse date time correctly? [duplicate] 【发布时间】:2021-09-13 20:26:03 【问题描述】:我对 Java 很陌生。
我正在从 oracle db 中获取此日期 1995-01-28T17:02:12.936000-0500
,现在我想将其转换为 yyyy-MM-dd HH:mm:ss
格式。我试过下面的方法
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS");
Date c=sdf.parse("1995-01-28T17:02:12.936000-0500");
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf1.format(c));
我的输出低于输出
1995-2-28 17:17:48
您可以看到 17:02:12 已更改为 17:17:48。我该如何解决这个问题?
【问题讨论】:
我打算将该日期和时间用作字符串936000
ms 是 15 分钟,很确定差异来自于这些
对不起,如果不明白。但这是否意味着总时间是正确的?
我对此表示怀疑:我假设您检索到的日期结束时的 936000 应该被理解为 936 毫秒(最后 3 个零是为了提高精度),但 SimpleDateFormat 没有任何任何比毫秒更精确的格式。看看是否可以更改检索日期的格式
您正在使用糟糕的日期时间类,这些类在几年前被 JSR 310 中定义的现代 java.time 类所取代。
【参考方案1】:
像这样试试。但是使用java.time 包中的方法。它在很多方面都优于 java.util.Date
和支持的方法,这些方法已经过时(并且有不少已被弃用)。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
OffsetDateTime odt = OffsetDateTime.parse("1995-01-28T17:02:12.936000-0500",dtf);
DateTimeFormatter resultFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(odt.format(resultFormat));
打印
1995-01-28 17:02:12
【讨论】:
解析时不需要 DateTimeFormatter。 OffsetDateTime.parse(String) 将默认处理该格式。 @VGR 我试过了,但它不起作用。可能是因为 OP 时间戳的偏移量中没有冒号。 @VGR 输入数据省略了偏移的小时和分钟之间的可选冒号字符。默认解析器期望缺少的字符。所以解析失败。【参考方案2】:从 936000 中删除 000。日期解析器将其视为 936,000 毫秒,即为您的日期/时间增加 936 秒,或大约 15 分钟。
【讨论】:
感谢您的解释。以上是关于如何将日期类转换为正确解析日期时间? [复制]的主要内容,如果未能解决你的问题,请参考以下文章