将一种格式的字符串日期转换为另一种格式的日期对象

Posted

技术标签:

【中文标题】将一种格式的字符串日期转换为另一种格式的日期对象【英文标题】:Convert String Date in one format to Date object in another format 【发布时间】:2013-04-08 09:41:56 【问题描述】:

我有一个输入日期,格式为 dd/MM/yyyy

的字符串

现在我想将其转换为具有格式 yyyy-MM-dd

的 Date 对象

目前我正在做

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd");
Date dateObject = null;
  try 
    String date2 = formatter2.format(formatter.parse(date));
    dateObject = formatter2.parse(date2);
  

输入是:“04/02/2013”​​

但我的日期对象是 --> Mon Feb 04 00:00:00 IST 2013

期望的输出是:2013-02-04(不是字符串,而是日期对象)

【问题讨论】:

看来你是直接打印日期。只需打印 date2。 我认为您无法选择日期对象的格式。我也不知道你为什么想要那个。你可以用任何你喜欢的方式展示它 不。我需要那个日期对象来查询数据库 @Sudhanshu 这是他的问题。虽然没有意义,但他想让 Date 对象直接包含所需的字符串。 @bhuvan:将 java.util.Date 转换为 java.sql.Date,然后使用准备好的语句的 setDate() 方法。不要乱用格式! 【参考方案1】:

日期没有特定的输出格式。当您解析第一个日期时,这就是日期。只需存储它,当您需要将其输出为所需格式时,请使用第二个SimpleDateFormat

编辑

“存储它”是指保留对它的引用,直到您需要它以所需的字符串格式表示。

【讨论】:

确实,如果你使用System.out.println(dateObject),它只会使用默认的字符串格式,正如 OP 所观察到的。以自定义方式打印需要格式化程序。【参考方案2】:

您已经在date2 中获得了格式化日期。您无需再次解析。

String date2 = formatter2.format(formatter.parse(date));
//dateObject = formatter2.parse(date2); // Not needed

System.out.println(date2);

【讨论】:

我不需要字符串。我需要该格式的日期对象 @bhuvan nope,你不需要特定的格式来使用 JDBC 的日期 正如@NilsH 在他的回答中提到的那样,java.util.Date 没有特定的格式。您只能将其格式化为您选择的 String 表示形式。但是Date 对象将始终保持这种状态。【参考方案3】:

我认为你在这里提出了错误的问题。如 cmets 中所述,您需要此字符串格式来查询数据库,因此,由于 JDBC 与 java.sql.Date 对象一起使用,因此请严格遵守它并将您的 java.util.Date 对象转换为 JDBC 托管类型并直接使用它(无需担心格式)。

试试这样的:

String stmt = "select field from table where dateColumn = ?";
PreparedStatement st = connection.prepareStatement(stmt);
st.setDate(1, new java.sql.Date (yourJavaUtilDateObj);
ResultSet rs = st.executeQuery();

应该适用于所有 JDBC 驱动程序。

【讨论】:

没有在 cmets OP 中表示他需要 jdbc 查询的日期,哇因为实际阅读 OP 想要的东西而被否决......太棒了 如果存储的类型实际上是一个日期,而不仅仅是一个日期字符串,那就可以了。 既然 OP 想要使用 Date 并说他需要一个日期,我想这不仅仅是一个疯狂的猜测 ;)。 我同意,但由于他想要特定格式,我仍然不确定。但无论如何,这是个好建议。【参考方案4】:

您的Date 对象是正确的。 Date 包含有关日期的信息。

您已经有了带有所需掩码的日期字符串:

String date2 = formatter2.format(formatter.parse(date));

尝试:

System.out.println(date2);

【讨论】:

【参考方案5】:

这对我有用:

public Timestamp convertStringToTimeStamp(String dateinString)
        final String OLD_FORMAT = "dd/mm/yyyy";
        final String NEW_FORMAT = "yyyy-mm-dd";

        String newDateString;

        SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
        Date d = null;
        try 
            d = sdf.parse(dateinString);
         catch (ParseException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        

        sdf.applyPattern(NEW_FORMAT);
        newDateString = sdf.format(d);

        return Timestamp.valueOf(newDateString+ " 00:00:00.00");
    

【讨论】:

以上是关于将一种格式的字符串日期转换为另一种格式的日期对象的主要内容,如果未能解决你的问题,请参考以下文章

无法将日期时间从字符串转换为另一种格式(例如:14/12/2021 03:34:03 PM 到 03:34 pm)

如何在swift(ios)中将字符串格式的日期转换为另一种字符串格式[重复]

如何使用 nsdateformatter 将 nsdate 转换为另一种格式

在java中将日期从一种格式转换为另一种格式[重复]

将日期转换为格式日、日月年

在 PHP 中将一种日期格式转换为另一种日期格式