使用Sybase日期格式附加24小时时间格式

时间:2016-12-15 22:34:43

标签: java date datetime datetime-format

我正在尝试使用(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中的时间字段。如果我使用格里高利历/我应该将字符串转换为日期时间格式。我怎样才能做到这一点。寻找建议

1 个答案:

答案 0 :(得分:0)

使用对象,而不是字符串

您的JDBC驱动程序的工作是在Java对象和数据库自己的数据格式之间进行转换。

在Java方面,避免使用麻烦的旧日期时间类,例如java.util.DateCalendar。它们现在已经遗留下来,取而代之的是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 [美国/蒙特利尔]

请参阅live code in IdeOne.com

通过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以获得更多讨论和更多示例。