【问题标题】: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() 方法。不要乱用格式!

标签: java string date


【解决方案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");
        }
    

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2017-08-27
      相关资源
      最近更新 更多