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

时间:2014-06-20 05:15:02

标签: java date

我需要以下列格式获取java.sql.date" MM-dd-yyyy",但是我需要它来保留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);

6 个答案:

答案 0 :(得分:7)

您可以采用与java.util.Date相同的方式(因为java.sql.Datejava.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日

答案 1 :(得分: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));

答案 2 :(得分:1)

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

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

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

注意:UNIX_TIMESTAMP函数适用于MySQL。您也可以为其他数据库找到这样的功能。

答案 3 :(得分:0)

formatter.parse只会为您提供java.util.Date而不是java.sql.Date

获得java.util.Date后,您可以通过

将其转换为java.sql.Date
java.sql.Date sqlDate = new java.sql.Date (normalDate.getTime ());

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

答案 4 :(得分:0)

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 :(得分:0)

对于在2017年或之后阅读此内容的任何人,现代解决方案使用来自LocalDate的{​​{1}},即现代Java日期和时间API,而不是java.time。后者很久了。

格式化日期

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

使用显式时区

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