我正在尝试使用(20:20)
以24小时格式"01/01/1900"
追加/转换时间。我正在使用sybase
数据库。我需要将它存储在sybase数据库(datetime字段)中,如"01/01/1900 20:20:00"
。用户输入24 hour time format
。我想将其附加到此日期"01/01/1900"
。从数据库中检索时,我还希望将日期时间字段转换为24 hour format
中的时间字段。如果我使用格里高利历/我应该将字符串转换为日期时间格式。我怎样才能做到这一点。寻找建议
答案 0 :(得分:0)
您的JDBC驱动程序的工作是在Java对象和数据库自己的数据格式之间进行转换。
在Java方面,避免使用麻烦的旧日期时间类,例如java.util.Date
和Calendar
。它们现在已经遗留下来,取而代之的是java.time类。
LocalTime
类用于没有日期且没有时区的时间值。
您的输入字符串恰好符合标准ISO 8601格式。默认情况下,java.time类使用这些标准格式。所以不需要指定解析格式。
LocalTime lt = LocalTime.parse( "20:21" );
同样,LocalDate
仅适用于日期格式。
要获取当前日期,需要一个时区。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate ld = LocalDate.now( z );
就本课题而言,我们需要一个硬编码的日期。
LocalDate ld = LocalDate.of( 1900 , Month.JANUARY , 1 );
将这些碎片放在一起并指定它们的预定时区。
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z );
zdt.toString():016-12-17T20:21-05:00 [美国/蒙特利尔]
通过PreparedStatement::setObject
通过JDBC传递到您的数据库。
myPS.setObject( … , zdt );
如果您的驱动程序尚不支持JDBC 4.2,请回到在驱动程序中使用旧的java.sql类型。查看添加到旧类进行转换的新方法。
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
myPS.setTimestamp( … , ts );
这些问题已在许多其他问题和解答中处理。搜索Stack Overflow以获得更多讨论和更多示例。