Dav*_*man 434 java sql datetime date
我试图使用java.util.Date输入,然后用它创建一个查询 - 所以我需要一个java.sql.Date.
我很惊讶地发现它无法隐式或显式地进行转换 - 但我甚至不知道如何做到这一点,因为Java API对我来说仍然是一个新手.
Dav*_*man 467
没关系....
public class MainClass {
public static void main(String[] args) {
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);
}
}
Run Code Online (Sandbox Code Playgroud)
Bas*_*que 66
如何将java.util.Date转换为java.sql.Date?
别.这两个课程都过时了.
java.util.Date和java.sql.DateJDBC 4.2或更高版本.用例子查询PreparedStatement.
myPreparedStatement.setObject(
… , // Specify the ordinal number of which argument in SQL statement.
myJavaUtilDate.toInstant() // Convert from legacy class `java.util.Date` (a moment in UTC) to a modern `java.time.Instant` (a moment in UTC).
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Adjust from UTC to a particular time zone, to determine a date. Instantiating a `ZonedDateTime`.
.toLocalDate() // Extract a date-only `java.time.LocalDate` object from the date-time `ZonedDateTime` object.
)
Run Code Online (Sandbox Code Playgroud)
替换:
如果您尝试使用仅限日期的值(没有时间,没有时区),请使用LocalDate该类而不是java.util.Date.
在Java 8及更高版本中,与早期版本的Java捆绑在一起的麻烦的旧日期时间类已被新的java.time包取代.请参阅Oracle教程.许多功能已被后移植到Java 6和7在ThreeTen-反向移植并且还适于在到Android ThreeTenABP.
一个SQL数据类型 DATE,就是要日期而已,没有时区没有时间的日和.java.time.LocalDate在Java 8中,Java从未有过这样的类† .让我们通过根据特定时区获取今天的日期来创建这样的值(时区对于确定一个日期是重要的,因为新的一天在巴黎早些时候比蒙特利尔早,例).
LocalDate todayLocalDate = LocalDate.now( ZoneId.of( "America/Montreal" ) ); // Use proper "continent/region" time zone names; never use 3-4 letter codes like "EST" or "IST".
Run Code Online (Sandbox Code Playgroud)
在这一点上,我们可能会完成.如果JDBC驱动程序符合JDBC 4.2规范,则应该能够将存储上的LocalDatevia 传递到SQL DATE字段.setObjectPreparedStatement
myPreparedStatement.setObject( 1 , localDate );
Run Code Online (Sandbox Code Playgroud)
同样,用于ResultSet::getObject从SQL DATE列获取Java LocalDate对象.在第二个参数中指定类会使您的代码类型安全.
LocalDate localDate = ResultSet.getObject( 1 , LocalDate.class );
Run Code Online (Sandbox Code Playgroud)
换句话说,整个问题在JDBC 4.2或更高版本下是无关紧要的.
如果JDBC驱动程序不以这种方式执行,则需要回退到转换为java.sql类型.
要进行转换,请使用添加到旧日期时间类的新方法.我们可以打电话java.sql.Date.valueOf(…)来转换一个LocalDate.
java.sql.Date sqlDate = java.sql.Date.valueOf( todayLocalDate );
Run Code Online (Sandbox Code Playgroud)
走向另一个方向.
LocalDate localDate = sqlDate.toLocalDate();
Run Code Online (Sandbox Code Playgroud)
java.util.Date虽然您应该避免使用旧的日期时间类,但在使用现有代码时可能会被迫使用.如果是这样,您可以转换为/从java.time.
浏览Instant类,它代表UTC时间轴上的一个时刻.An Instant在想法上类似于a java.util.Date.但请注意,Instant分辨率高达纳秒,而分辨率java.util.Date仅为毫秒.
要转换,请使用添加到旧类的新方法.例如,java.util.Date.from( Instant )和java.util.Date::toInstant.
Instant instant = myUtilDate.toInstant();
Run Code Online (Sandbox Code Playgroud)
要确定日期,我们需要时区的上下文.对于任何特定时刻,日期在全球各地按时区变化.申请一个ZoneId来获得一个ZonedDateTime.
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
LocalDate localDate = zdt.toLocalDate();
Run Code Online (Sandbox Code Playgroud)
†java.sql.Date类假装只是日期而没有时间,但实际上是在一天的时间,调整到午夜时间.混乱?是的,旧的日期时间类是一团糟.
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
mau*_*tto 39
使用其他答案,您可能会遇到时间信息问题(将日期与意外结果进行比较!)
我建议:
java.util.Calendar cal = Calendar.getInstance();
java.util.Date utilDate = new java.util.Date(); // your util date
cal.setTime(utilDate);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
java.sql.Date sqlDate = new java.sql.Date(cal.getTime().getTime()); // your sql date
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);
Run Code Online (Sandbox Code Playgroud)
che*_*tan 25
此函数将从java日期对象返回转换的SQL日期.
public java.sql.Date convertJavaDateToSqlDate(java.util.Date date) {
return new java.sql.Date(date.getTime());
}
Run Code Online (Sandbox Code Playgroud)
she*_*bye 18
转换java.util.Data为java.sql.Data将丢失小时,分钟和秒.所以,如果有可能,我建议你这样使用java.sql.Timestamp:
prepareStatement.setTimestamp(1, new Timestamp(utilDate.getTime()));
Run Code Online (Sandbox Code Playgroud)
有关详细信息,您可以查看此问题.
jac*_*jay 14
在我从JXDatePicker(java日历)中选择日期并将其作为SQL日期类型存储在数据库中的情况下,下面工作正常..
java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());
其中pickedDate是JXDatePicker的对象
此函数将从java日期对象返回转换的SQL日期.
public static java.sql.Date convertFromJAVADateToSQLDate(
java.util.Date javaDate) {
java.sql.Date sqlDate = null;
if (javaDate != null) {
sqlDate = new Date(javaDate.getTime());
}
return sqlDate;
}
Run Code Online (Sandbox Code Playgroud)
首先格式化您的 java.util.Date。然后使用格式化的日期获取java.sql.Date中的日期
java.util.Date utilDate = "Your date"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
final String stringDate= dateFormat.format(utilDate);
final java.sql.Date sqlDate= java.sql.Date.valueOf(stringDate);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
591652 次 |
| 最近记录: |