Jos*_*des 6 java timestamp calendar
我有ISO 8601日期格式的日期2015-09-08T01:55:28Z.我使用此代码将ISO 8601命运转换为Calendar对象:
Calendar cal = javax.xml.bind.DatatypeConverter.parseDateTime("2015-09-08T01:55:28Z");
Run Code Online (Sandbox Code Playgroud)
现在我需要使用它cal.getTime()来获取我的时间,但我需要将其转换为java.sql.Timestamp.我试着这样做:
final Timestamp finalDate = (Timestamp) cal.getTime();
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Timestamp
Run Code Online (Sandbox Code Playgroud)
想法?
Puc*_*uce 13
异常说:Calendar::getTime()返回一个java.util.Date对象,而不是一个java.sql.Timestamp对象.因此,您无法将其强制转换为Timestamp对象.
使用:
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());
Run Code Online (Sandbox Code Playgroud)
并且还考虑Calendar使用Java SE 8中引入的新Date&Time API进行替换.
Puce的答案是正确的。
Java 8 及更高版本中的现代方法是使用新的java.time框架。这些新类取代了旧的 java.util.Date/.Calendar,后者已被证明是令人困惑和麻烦的。
AnInstant是时间轴上的一个时刻,从 UTC 时间 1970 年的第一个时刻开始计算的纳秒数。该类能够解析符合 ISO 8601 格式的字符串。
String input = "2015-09-08T01:55:28Z";
Instant instant = Instant.parse( input );
Run Code Online (Sandbox Code Playgroud)
java.sql类型的数据库从 Instant 中,我们可以通过调用新添加到这个旧类的方法来获取java.sql.Timestampfrom。
java.sql.Timestamp ts = java.sql.Timestamp.from( instant );
Run Code Online (Sandbox Code Playgroud)
我们可以将所有三行合并为一行,这不是我推荐的(使调试更加困难)。
java.sql.Timestamp ts = Timestamp.from( Instant.parse( "2015-09-08T01:55:28Z" ) );
Run Code Online (Sandbox Code Playgroud)
java.time类型由于JDBC 4.2,兼容JDBC驱动程序应该能够通过传递java.time类型getObject和setObject上一个PreparedStatement。如果您的驱动程序没有,请使用旧类的转换方法。
myPreparedStatement.setObject( 1 , instant );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13855 次 |
| 最近记录: |