如何将日期类转换为正确解析日期时间? [复制]

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 分钟。

【讨论】:

感谢您的解释。

以上是关于如何将日期类转换为正确解析日期时间? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将日期时间字符串转换为日期类

将日期字符串转换为正确的格式

如何在 Android 中将字符串解析为日期? [复制]

如何将mysql日期时间转换为客户端日期时间? [复制]

如何将一列时间戳转换为日期时间? [复制]

如何将日期字符串转换为日期或日历对象?