3 回答
TA贡献1818条经验 获得超3个赞
你可以做这样的事情
Instant now = Instant.now();
Duration diff = Duration.between(
LocalTime.MIN,
LocalTime.parse("02:00:00")
);
Instant res = now.plus(diff);
System.out.println("res = " + Timestamp.from(res));
TA贡献1900条经验 获得超5个赞
插入两小时后的片刻。
myPreparedStatement // Use a `PreparedStatement` to exchange data with your database, to avoid SQL-injection risk. Use JDBC 4.2 or later for *java.time* support.
.setObject( // Fill a placeholder `?` in your SQL statement.
… , // Specify which placeholder.
OffsetDateTime // Use `OffsetDateTime` to specify a moment in JDBC 4.2. Optionally, your JDBC might support `Instant` or `ZonedDateTime` types, while support for `OffsetDateTime` is required.
.now( // Capture the current moment.
ZoneOffset.UTC // Set the offset-from-UTC to zero. We do not need to account for any time zone in this particular business scenario.
) // Returns an `OffsetDateTime` object.
.plus( // Adds a span-of-time to the moment held in the `OffsetDateTime` object.
Duration.parse( "PT2H" ) // Specify the span-of-time using standard ISO 8601 format for a duration.
) // Per Immutable Objects pattern, returns a new `OffsetDateTime` rather than changing ("mutating") the original.
)
细节
我有一个字符串值为“02:00:00”,所以基本上我需要在这个时间上加上 2 小时并获取需要插入的未来时间戳值
这是传达与时间线无关的时间跨度的糟糕方式。
标准方式是标记开始的地方,并将年PnYnMnDTnHnMnS-月-日与小时-分钟-秒分开。所以2小时是。PTPT2H
要解析这样的字符串,请使用Durationclass for hours-minutes-seconds(或Periodfor years-months-days)。
String input = "PT2H" ;
Duration d = Duration.parse( input ) ;
您可以生成这样的字符串。
String output = Duration.ofHours( 2 ).toString() ; // Yields "PT2H" string.
以UTC捕获当前时刻。
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;
使用标准ISO 8601 符号添加两个小时的持续时间。
Duration d = Duration.parse( "PT2H" ) ;
ZonedDateTime odtLater = odt.plus( d ) ; // Add 2 hours to the current moment.
使用 JDBC 4.2 或更高版本将其提交到您的数据库。
myPreparedStatement.setObject( … , odtLater ) ;
恢复。
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
添加回答
举报