当前位置: 首页 > 知识库问答 >
问题:

将Java.sql.timestamp转换为Java 8 ZonedDateTime?

双俊人
2023-03-14
UserObject user = new UserObject()
user.setCreatedAt(new DateTime(rs.getTimestamp("columnName")));`
ZonedDateTime.ofInstant(rs.getTimestamp("columnName").toLocalDateTime().toInstant(ZoneOffset.UTC),ZoneId.of("UTC")));

在某些情况下,日期是错误的。有什么建议吗?

共有1个答案

姚浩歌
2023-03-14

若要跟踪历史中的某个时刻,请使用instant作为类成员变量的类型。具体地说,这一时刻被视为UTC中的日期和一天中的时间。

public class UserObject() {
    Instant createdAt ;
    …
    public void setCreatedAt( Instant instantArg ) {
        this.createdAt = instantArg ;
    {
}

用法,捕捉当前时刻。

UserObject user = new UserObject() ;
user.setCreatedAt( Instant.now() ) ;

用法,从数据库填充值。

UserObject user = new UserObject() ;
Instant instant = myResultSet.getObject( "when_created" , Instant.class ) ;
user.setCreatedAt( instant ) ;
UserObject user = new UserObject() ;
OffsetDateTime odt = myResultSet.getObject( "when_created" , OffsetDateTime.class ) ;  
user.setCreatedAt( odt.toInstant() ) ;  // Convert from an `OffsetDateTime` (for any offset-from-UTC) to `Instant` (always in UTC). 
user               // Your business object.
.getCreatedAt()    // Returns a `Instant` object.
.atZone(           // Adjust from UTC to a time zone. Same moment, same point on the timeline, different wall-clock time.
    ZoneId.of( "Pacific/Auckland" )  // Specify the user’s desired/expected time zone.
)                  // Returns a `ZonedDateTime` object. 
.format(           // Generate a `String` representing the value of date-time object.
    DateTimeFormatter.ofLocalizedDateTime(
        FormatStyle.FULL   // Specify how long or abbreviated the string.
    )
    .withLocale(   // Specify `Locale` to determine human language and cultural norms for localization.
        Locale.CANADA_FRENCH 
    )
)                  // Returns a `String`.
    null
Instant instant = Instant.now() ;  // Capture the current moment in UTC.
myPreparedStatement.setObject( … , instant ) ;
Instant instant = myResultSet.getObject( … , Instant.class ) ;
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

Java.time框架内置在Java8和更高版本中。这些类取代了麻烦的旧的遗留日期-时间类,如java.util.dateCalendar、&SimpleDateFormat

要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR310。

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

    null
    null
    null
 类似资料:
  • 有没有一种方法可以将转换为? 我有以下代码: 但是时间戳构造函数似乎不支持该变量类型。

  • 问题内容: 我正在使用JodaTime 1.6.2。 我有一个需要转换为(Joda)或进行映射的a。 原因是我想出了如何在a 和a 之间进行转换: 因此,如果我可以在和之间进行转换,则可以继续转换为。感谢您朝着正确的方向前进! 问题答案: 乔达时间 要将JodaTime转换为,只需执行 要将JodaTime转换为,只需执行 Java时间 要将Java8转换为,只需执行 要将Java8转换为,只需执

  • 问题内容: 将Joda时间迁移到Java 8 乔达: 迁移至Java 8 这是我的代码;它确实可以编译;我怀疑它是否有效: 在某些情况下,日期是错误的。有什么建议吗? 问题答案: 这似乎可行:

  • 在Java8中,如何将(在中)转换为(在中)?

  • 问题内容: 即 此代码 给我 : 2012-16-02 05:16:17 什么时候 返回: 2012-01-02 05:16:17.0 问题答案: 您应该改用日历:

  • 问题内容: 在我正在开发的应用程序中,我需要将object 转换为。当我创建对象时: 我收到类似的东西。当我尝试创建这样的对象时: 我收到类似的东西。相同的结果,但有2个小时的延迟。有人可以解释为什么会发生这种情况,并在不造成延迟的情况下为我提供解决此问题的答案吗? 当我这样创建时: 一切正常。但是我尽量避免转换。有没有一种方法可以只使用对象呢? 问题答案: 我将计算机的时区更改为欧洲/布加勒斯特