如何将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.Date
是java.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
不要将日期值与其文本表示混淆
LocalDate
和java.sql.Date
对象都没有任何固有格式。 因此,请尝试 – 并在必要时努力尝试 – 将两个概念区分开来,一方面的日期和另一方面的用户介绍。
它就像int
和所有其他数据类型。 int
的值可以是4284.您可以将其格式化为4,284或4 284,004284,甚至可以格式化为hex表示。 这绝不会改变int
本身。 同样,格式化日期不会影响日期对象。 因此,使用字符串呈现给用户,并使用LocalDate
存储到数据库中(现代JDBC驱动程序或其他现代数据库访问方式将很乐意这样做,例如通过PreparedStatement.setObject()
)。
使用显式时区
获取今天的日期是一个时区敏感的操作,因为它在世界所有时区都不是同一天。 我强烈建议您在代码中明确说明这一事实。 在我的片段中,我使用了亚洲/加尔各答时区,请替换您所需的时区。 您可以将ZoneId.systemDefault()
用于JVM的时区设置,但请注意,此设置可能会由程序的其他部分或在同一JVM中运行的其他程序在我们的脚下更改,因此这很脆弱。