无法将 java.util.Date 格式转换为 yyyy-mm-dd

问题描述 投票:0回答:1

我正在尝试将 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 date java-8 java.util.date
1个回答
0
投票
  1. java.util.Date
    是谎言。它不代表日期。它代表时间中的时刻,没有时区。几乎所有 Date 方法(例如
    .getYear()
    )都被弃用是有原因的:询问某个时刻“那是哪一年”是“不可能”的。至少不涉及时区。

  2. 日期对象没有格式。从字面上看,它们包含 1 个带有纪元毫秒的
  3. long

    字段。相反,任何时候您想要将日期转换为屏幕上的像素(例如,您尝试将其扔到

    System.out.println
    jLabel.setText(dateHere)
    ,或者将其扔到模板上下文对象中,然后使用该对象呈现 HTML模板),您选择,
    每次
    如何将这个带有愚蠢名称的epochmillis包装器转换为那些像素/字符。 没有办法修改 Date 的 toString() 实现呈现它的方式,并且一般来说
    toString()
    仅用作调试辅助,
    从不
    作为业务逻辑的一部分(汤并没有完全消耗)正如我刚才所说的那样,但特别是如果您没有经验或对 Java 很陌生,那么在您获得更多经验之前,这是要遵守的经验法则)。

  4. 因此,您的问题没有直接答案,因为您的问题的具体细节没有任何意义。这就像问:“我如何用‘鱼’的颜色粉刷我的墙壁。我应该使用哪把螺丝刀?” - 一系列不合逻辑的推论。

但是精神已经足够明显了。

因此:

    使用
  1. java.time

    。停止使用

    java.util.Date
    。如果您被迫这样做,因为您无法直接控制的事物向您提供了它,那么请仔细检查是否没有更好的方法(例如:如果使用 JDBC 与数据库通信,请不要调用
    .getDate(colIdx) 
    .致电
    .getObject(colIdx, LocalDate.class)
    )。如果确实没有像对待您被迫使用的任何损坏代码一样对待它:用“清洁剂”包裹它 - 确保坏东西不会感染您的代码库。编写一个方法,从您无法更改的外部事物中获取
    j.u.Date
    并立即将其修改为此处实际合适的内容(可能是
    LocalDate
    ,可能是
    ZonedDateTime
    ,可能是
    Instant
    - 无需您解释这是什么是因为,没有办法知道。日期/时间计算对于“一种类型涵盖所有需求”解决方案来说太复杂了)。
    
    

  2. 使用
  3. DateTimeFormatter

    (java.time 的 SimpleDateFormat 版本)。

    
    

  4. 如果需要转换计算方式,不要通过格式化和解析。格式化和解析就是为了将某个时间点的概念从人类手指转移到计算机,再从计算机转移到人类眼球。
  5. java.time

    物体有办法从一个物体转移到另一个物体。有一个

    LocalDateTime
    并需要将其设为分区吗? LDT 上有一些方法可以将它们制成 ZDT。它们的参数在此过程中指导您(例如,为此,您需要指定一个时区)。您需要从一个区域转换到另一区域吗?获取您的 LDT,将其转换为 ZDT,将其转换为不同区域中的 ZDT,然后将其转换回 LDT。
    
    

© www.soinside.com 2019 - 2024. All rights reserved.