我需要将当前日期添加到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
对象?
答案 0 :(得分:70)
java.util.Date
不是java.sql.Date
。这是相反的方式。 java.sql.Date
是java.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)
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.util.Date
和java.sql.Date
。
对于仅限日期的值,请使用LocalDate
。 LocalDate
类表示没有时间且没有时区的仅限日期的值。
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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());