如何将java.sql.date格式化为这种格式:“MM-dd-yyyy”?

我需要以下面的格式“MM-dd-yyyy”获取java.sql.date,但是我需要它来保留java.sql.date所以我可以将它作为日期字段放入表中。 因此,格式化后它不能是String,它必须最终作为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); 

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

 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日

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

  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)); 

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

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

那么,当绑定值时,只需传递date.getTime() ?

注意: UNIX_TIMESTAMP函数适用于MySQL。 您也可以在其他数据库中找到这些function。

 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)时,它们将始终以日期的forms进行比较代表。 日期格式只是以所需格式设置或获取日期的一种方式。

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

一旦你有了java.util.Date ,就可以通过执行将其转换为java.sql.Date

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

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

对于2017年或之后阅读本文的人来说,现代解决方案使用java.time LocalDate ,现代Java日期和时间API,而不是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 

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

LocalDatejava.sql.Date对象都没有任何固有格式。 因此,请尝试 – 并在必要时努力尝试 – 将两个概念区分开来,一方面的日期和另一方面的用户介绍。

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

使用显式时区

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