【问题标题】:Convert SQL or UTIL DATE to expected format "dd-MMM-yyyy", but not in String value [duplicate]将 SQL 或 UTIL DATE 转换为预期格式“dd-MMM-yyyy”,但不是字符串值 [重复]
【发布时间】:2020-03-10 14:53:55
【问题描述】:

我有一个 java util Date 对象,我需要以“dd-MMM-yyyy”的格式编写它,但不是字符串(可以是 sql 或 util Date,没关系),我不了解我做错了什么,因为我得到的是“11”,而不是一个月的“11 月”。只有当我格式化为字符串时才会给出正确的输出...

谁能帮帮我?这是我到目前为止所尝试的,我不想要字符串的原因是因为我需要使用这个日期作为参数来运行数据库查询,并且 sql 中的字段类型是日期。

        Date currentDate = new Date(Calendar.getInstance().getTimeInMillis());  output value: Thu Nov 14 17:21:44 EET 2019
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
        String formattedDate = simpleDateFormat.format(currentDate);    output value: 14-Nov-2019
        java.util.Date date = simpleDateFormat.parse(formattedDate);    output value: Thu Nov 14 00:00:00 EET 2019
        java.sql.Date sqlStartDate = new java.sql.Date(date.getTime()); output value: 2019-11-14

【问题讨论】:

  • java.util.Datejava.sql.Date 对象不表示格式化的日期,而只是表示可以格式化为字符串的日期,如果您对其应用格式样式。 格式化日期是一个字符串。
  • 日期只是一个长整数,自纪元以来的毫秒数。在将其转换为字符串之前,它没有任何格式。它是默认的 Date.toString() 方法,它为您提供以“11”作为月份的格式。
  • 我有什么办法可以得到“Nov”而不是“11”?
  • 查看SimpleDateFormat 类,用于将日期格式化为字符串。
  • 你我同意这个the nature of these date classes, ie. they do not have formats.@SotiriosDelimanolis

标签: java sql date


【解决方案1】:

问题很困惑,您可以使用常见的日期源,即日历,然后根据需要使用它。如果你需要设置一个参数,我认为你应该通过preparedstatement来设置它:

Calendar c=Calendar.getInstance();
java.sql.Date sqlDate=new java.sql.Date(c.getTimeInMillis());
preparedStatement.setDate(1, sqlDate);

如果你想查看格式化后的字符串,你肯定可以将它与 simpledateformat 一起使用。

java.util.Date utilDate = c.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = simpleDateFormat.format(utilDate);

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2016-05-08
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多