此问题已在此处有答案:
Convert date string (EST) to Java Date (UTC)(2个答案)
TimeZone Date Conversion [Convert a Date object to a specified timeZone Date Object](1个答案)
How do i get a date object for a specific timezone from a string date in Java? [duplicate](3个答案)
2小时前关闭
我有一段代码,可以在Java中将String
转换为Date
,如下所示:
String value = "20220307150417";
DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = formatter.parse(value);
System.out.println(date.toString());
但输出是这样的:Mon Mar 07 15:04:17 EEST 2022
如何将此更改为EET?所以我想得到的答案是Mon Mar 07 15:04:17 EET 2022
。
2条答案
按热度按时间xriantvc1#
您可以将
String
解析为LocalDateTime
(只有日期和时间,NO zone和UTC / GMT的NO偏移量)。如果您在之后应用了一个特定的区域,您可以构建一个
ZonedDateTime
,它可以根据需要进行格式化。ZonedDateTime
可以转换为Instant
,这是传统兼容性的一个选项,因为有Date.from(Instant)
和Date.toInstant()
。这里是一个不同输出的示例
请注意,
Date.toString()
考虑了系统的区域设置和时区,显然不知道夏令时。这把我的
Locale
…输出
请注意,
Instant.toEpochMilli()
和Date.getTime()
具有相同的历元米利斯值!为什么是
ZoneId.of("Europe/Kaliningrad")
?因为要求似乎总是使用EET。这意味着您必须选择一个
mec1mxoz2#
SimpleDateFormat
和Date
类都过时了(双关语)。这种表示日期的模型存在严重缺陷,甚至在java提出替代方案之前,就有其他库提供了更好的解决方案。但是,到目前为止,您必须使用java.time
包。在本例中,查找类DateTimeFormatter和ZonedDateTime。还可以阅读有关java.time包的信息。你可能也会发现这一点相关:我曾经有一个项目,我必须解析一个字符串,它可能适合任何可能的格式到日期,而不知道格式。因此,我想出了一个主意,我将所有支持的格式存储在一个属性文件中,并尝试逐个解析所有这些格式的String,直到成功或所有格式都失败。值得注意的是,在这种情况下,列表格式的顺序也可能很重要,因为像02-03-2022这样的日期可能会被解析为3月2日或2月3日,这取决于美国或欧洲的风格。在任何情况下,我写了一篇关于这个想法的文章,可能与此相关:Java 8 java.time package: parsing any string to date