【问题标题】:How do I format a java.sql.date into this format: "MM-dd-yyyy"?如何将 java.sql.date 格式化为这种格式:“MM-dd-yyyy”?
【发布时间】:2014-06-20 05:15:01
【问题描述】:

我需要以以下格式“MM-dd-yyyy”获取 java.sql.date,但我需要将其保留为 java.sql.date,以便可以将其作为日期字段放入表中。因此,格式化后它不能是字符串,它必须以 java.sql.date 对象的形式结束。

这是我迄今为止尝试过的:

java.util.Date 
today=new Date();
String date = formatter.format(today); 
Date todaydate = formatter.parse(date);
java.sql.Date fromdate = new java.sql.Date(todaydate.getTime());
java.sql.Date todate=new java.sql.Date(todaydate.getTime()); 
String tempfromdate=formatter.format(fromdate);
String temptodate=formatter.format(todate); 
java.sql.Date fromdate1=(java.sql.Date) formatter.parse(tempfromdate); 
java.sql.Date todate1=(java.sql.Date) formatter.parse(temptodate);

【问题讨论】:

  • 你能展示一下到目前为止你尝试了什么吗?
  • @user3758849 使用代码编辑原始问题,并包括为什么/如何它不能按预期工作。
  • 你能检查我的代码吗..我尝试了很多方法..cud'n 想出了确切的输出,这就是为什么我在这里。 @shekharsuman
  • 您要么格式化 Date 并获得 String,要么按原样使用 Date 对象。你的要求没有意义。

标签: java date


【解决方案1】:

您可以像 java.util.Date 一样使用 SimpleDateFormat(因为 java.sql.Date 是 java.util.Date 的子类)和 SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat(
    "MM-dd-yyyy");
int year = 2014;
int month = 10;
int day = 31;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1); // <-- months start
                                    // at 0.
cal.set(Calendar.DAY_OF_MONTH, day);

java.sql.Date date = new java.sql.Date(cal.getTimeInMillis());
System.out.println(sdf.format(date));

输出是预期的

2014 年 10 月 31 日

【讨论】:

  • 是的,但是当你格式化日期时,你只会得到字符串类型的输出。
  • @user3758849 这就是格式化日期的意思。这是另一种说法,日期不是字符串;或者,如果您愿意,String(s) 不是 Date(s)。
  • 是的,我同意。但我无法检查字符串中的格式化日期和日期中的数据库列。这是我的问题。
【解决方案2】:

使用下面的代码,我已经转换了今天的日期。从中学习并尝试使用您的代码

          Date today = new Date();

        //If you print Date, you will get un formatted output
        System.out.println("Today is : " + today);

        //formatting date in Java using SimpleDateFormat
        SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy");
        String date = DATE_FORMAT.format(today);
        System.out.println("Today in MM-dd-yyyy format : " + date);

            Date date1 = formatter.parse(date);
    System.out.println(date1);
    System.out.println(formatter.format(date1));

【讨论】:

  • 你检查我的代码了吗?即使我已经转换了今天的日期
  • java.util.Date today=new Date(); String date = formatter.format(today);今天的日期date = formatter.parse(date);已经完成了。我需要将 sql 日期传递给我的查询。
  • 非常有用的构造 String date = DATE_FORMAT.format(today);它帮助了我。
【解决方案3】:

一个更简单的解决方案是在比较之前将查询中的日期转换为纪元。

SELECT date_column from YourTable where UNIX_TIMESTAMP(date_column) > ?;

然后,在将值绑定到? 时,只需传递date.getTime()。

注意:UNIX_TIMESTAMP 函数适用于 MySQL。您也可以在其他数据库中找到此类功能。

【讨论】:

  • 抱歉,无权更改数据库列及其 MS SQL 服务器管理工​​作室。
  • 你不需要改变列,你只需要改变查询
  • 这是我想从 java 传递这些日期的地方。转换(日期,XXXX)> = CAST(?AS日期)和转换(日期,XXXX)
【解决方案4】:
java.util.Date today=new Date();
java.sql.Date date=new java.sql.Date(today.getTime()); //your SQL date object
SimpleDateFormat simpDate = new SimpleDateFormat("MM-dd-yyyy");
System.out.println(simpDate.format(date)); //output String in MM-dd-yyyy

请注意,无论您的日期是 mm-dd-yyyy 格式还是任何其他格式,当您比较日期(java.sql.Date 或 java.util.Date)时,它们总是会以以下形式进行比较他们代表的日期。日期格式只是一种以所需格式设置或获取日期的方法。

【讨论】:

    【解决方案5】:

    formatter.parse 只会给你一个java.util.Date 而不是java.sql.Date

    一旦你有了java.util.Date,你就可以将它转换成java.sql.Date

    java.sql.Date sqlDate = new java.sql.Date (normalDate.getTime ());
    

    另请注意,没有日期有任何内置格式,它实际上是一个建立在数字之上的类。

    【讨论】:

      【解决方案6】:

      对于 2017 年或之后阅读本文的任何人,现代解决方案使用来自现代 Java 日期和时间 API java.time 的 LocalDate,而不是 java.sql.Date。后者早已过时。

      格式化您的日期

          DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-uuuu", Locale.US);
          LocalDate fromDate = LocalDate.now(ZoneId.of("Asia/Kolkata"));
          String tempFromDate = fromDate.format(formatter);
          System.out.println(tempFromDate);
      

      这会打印出类似的东西

      11-25-2017
      

      不要将您的日期值与其文本表示混淆

      LocalDate 和 java.sql.Date 对象都没有任何固有格式。因此,请尝试(如有必要,请努力)将这两个概念分开,一方面是日期,另一方面是向用户呈现的内容。

      就像int 和所有其他数据类型。 int 的值可以是 4284。您可以将其格式化为 4,284 或 4 284、004284 甚至十六进制表示。这绝不会改变int 本身。同样,格式化日期不会影响日期对象。因此,使用字符串呈现给用户,并使用 LocalDate 存储到您的数据库中(现代 JDBC 驱动程序或其他现代数据库访问方式将很乐意这样做,例如通过 PreparedStatement.setObject())。

      使用明确的时区

      获取今天的日期是对时区敏感的操作,因为它在世界上的所有时区都不是同一个日期。我强烈建议您在代码中明确说明这一事实。在我的 sn-p 中,我使用了亚洲/加尔各答时区,请替换您想要的时区。您可以使用ZoneId.systemDefault() 作为您的 JVM 的时区设置,但请注意,您的程序的其他部分或在同一 JVM 中运行的其他程序可能会在我们的脚下更改此设置,所以这个很脆弱。

      【讨论】:

        猜你喜欢
        • 2016-04-10
        • 2020-11-29
        • 2018-04-02
        • 2016-12-13
        • 2021-08-01
        • 2017-04-16
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        相关资源
        最近更新 更多