我正在尝试将 java.util.Date 转换为 java.util.Date 但格式不同
2023 年 CDT 10 月 11 日星期三 10:00:00 --> 2023-10-11T10:00:00.000Z
我展示了很多帖子,也尝试了下面不同的解决方案,但没有成功。
将日期转换为字符串,然后再次转换为日期,但格式不变。
Date utilDate = Wed Oct 11 10:00:00 CDT 2023 // Your java.util.Date
// Define the desired format
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Convert the java.util.Date to a formatted String
String formattedDate = dateFormat.format(utilDate);
System.out.println("Formatted Date String: " + formattedDate);
//convert String again into java.util.Date
// it will return the same utilDate.
还尝试使用 2 SimpleDateFormat 对象。请进一步指导我。
java.util.Date
是谎言。它不代表日期。它代表时间中的时刻,没有时区。几乎所有 Date 方法(例如 .getYear()
)都被弃用是有原因的:询问某个时刻“那是哪一年”是“不可能”的。至少不涉及时区。
long
字段。相反,任何时候您想要将日期转换为屏幕上的像素(例如,您尝试将其扔到
System.out.println
或 jLabel.setText(dateHere)
,或者将其扔到模板上下文对象中,然后使用该对象呈现 HTML模板),您选择,每次,如何将这个带有愚蠢名称的epochmillis包装器转换为那些像素/字符。 没有办法修改 Date 的
toString()
实现呈现它的方式,并且一般来说 toString()
仅用作调试辅助,从不作为业务逻辑的一部分(汤并没有完全消耗)正如我刚才所说的那样,但特别是如果您没有经验或对 Java 很陌生,那么在您获得更多经验之前,这是要遵守的经验法则)。
但是精神已经足够明显了。
因此:
java.time
。停止使用
java.util.Date
。如果您被迫这样做,因为您无法直接控制的事物向您提供了它,那么请仔细检查是否没有更好的方法(例如:如果使用 JDBC 与数据库通信,请不要调用 .getDate(colIdx)
.致电.getObject(colIdx, LocalDate.class)
)。如果确实没有像对待您被迫使用的任何损坏代码一样对待它:用“清洁剂”包裹它 - 确保坏东西不会感染您的代码库。编写一个方法,从您无法更改的外部事物中获取 j.u.Date
并立即将其修改为此处实际合适的内容(可能是 LocalDate
,可能是 ZonedDateTime
,可能是 Instant
- 无需您解释这是什么是因为,没有办法知道。日期/时间计算对于“一种类型涵盖所有需求”解决方案来说太复杂了)。
DateTimeFormatter
(java.time 的 SimpleDateFormat 版本)。
java.time
物体有办法从一个物体转移到另一个物体。有一个
LocalDateTime
并需要将其设为分区吗? LDT 上有一些方法可以将它们制成 ZDT。它们的参数在此过程中指导您(例如,为此,您需要指定一个时区)。您需要从一个区域转换到另一区域吗?获取您的 LDT,将其转换为 ZDT,将其转换为不同区域中的 ZDT,然后将其转换回 LDT。