以java.sql.Date格式获取当前日期

时间:2013-08-15 16:57:03

标签: java jdbc java.util.date

我需要将当前日期添加到JDBC调用的预准备语句中。我需要以yyyy/MM/dd

等格式添加日期

我试过

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
pstm.setDate(6, (java.sql.Date) date);

但我有这个错误:

threw exception
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

有没有办法获得格式相同的java.sql.Date对象?

10 个答案:

答案 0 :(得分:70)

java.util.Date不是java.sql.Date。这是相反的方式。 java.sql.Datejava.util.Date

您需要使用java.sql.Date可以提供的constructor that takes a long将其转换为java.util.Date

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

答案 1 :(得分:31)

只需一行:

array

答案 2 :(得分:15)

new java.sql.Date(Calendar.getInstance().getTimeInMillis());

答案 3 :(得分:9)

这些都太长了。

只需使用:

new Date(System.currentTimeMillis())

答案 4 :(得分:1)

TL;博士

myPreparedStatement.setObject(   // Directly exchange java.time objects with database without the troublesome old java.sql.* classes.
    … ,                                   
    LocalDate.parse(             // Parse string as a `LocalDate` date-only value.
        "2018-01-23"             // Input string that complies with standard ISO 8601 formatting.
    ) 
)

java.time

现代方法使用 java.time 类来取代麻烦的旧遗留类,例如java.util.Datejava.sql.Date

对于仅限日期的值,请使用LocalDateLocalDate类表示没有时间且没有时区的仅限日期的值。

java.time类在解析/生成字符串时使用标准格式。因此无需指定格式化模式。

LocalDate ld = LocalDate.parse( input ) ;

您可以使用符合JDBC driver或更高版本的JDBC 4.2直接与数据库交换 java.time 对象。您可以忘记转换java.sql。*类的转换。

myPreparedStatement.setObject( … , ld ) ;

检索:

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 5 :(得分:1)

会这样做: new Date(Instant.now().toEpochMilli())

答案 6 :(得分:1)

为了获取“当前日期”(如今天的日期),可以使用LocalDate.now()并将其传递到java.sql.Date方法valueOf(LocalDate)中。

import java.sql.Date;
...
Date date = Date.valueOf(LocalDate.now());

答案 7 :(得分:0)

您可以通过以下方式实现目标: -

long millis=System.currentTimeMillis();  
java.sql.Date date=new java.sql.Date(millis);  

// create a java calendar instance
Calendar calendar = Calendar.getInstance();

// get a java date (java.util.Date) from the Calendar instance.
// this java date will represent the current date, or "now".
java.util.Date currentDate = calendar.getTime();

// now, create a java.sql.Date from the java.util.Date
java.sql.Date date = new java.sql.Date(currentDate.getTime());

答案 8 :(得分:0)

你要做的就是这个

    Calendar currenttime = Calendar.getInstance();               //creates the Calendar object of the current time
    Date sqldate = new Date((currenttime.getTime()).getTime());  //creates the sql Date of the above created object
    pstm.setDate(6, (java.sql.Date) date);              //assign it to the prepared statement (pstm in this case)

答案 9 :(得分:0)

由于java.sql.Date具有需要'long time'的构造函数,而java.util.Date具有返回'long time'的方法,所以我只是将返回的'long time'传递给java.sql。创建日期的日期。

java.util.Date date = new java.util.Date();
java.sql.Date sqlDate = new Date(date.getTime());