java—在数据库中插入当前utc时间的日期时间

ig9co6j1  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(339)

我正试图通过sql中的getutcdate()函数将datetime插入当前utc时间的mysql数据库。它因“getutcdate函数不存在”而失败。
是一种从java获取sql datetime格式的当前utc时间并将其作为字符串插入的方法吗?
我遇到的另一个大问题是,我需要将上面的utc datetime对象转换为本地时区,但我不知道如何通过标准javaapi实现这一点。

ymzxtsji

ymzxtsji1#

热释光;博士

myPreparedStatement      // Using a `PreparedStatement` avoids SQL-injection security risk.
.setObject(              // As of JDBC 4.2, we can exchange java.time objects with a database via `getObject`/`setObject` methods.
    … ,                  // Indicate which `?` placeholder in your SQL statement.
    OffsetDateTime.now( ZoneOffset.UTC )  // Capture the current moment in UTC.
) ;

java.time文件

现代的解决方案使用多年前的java.time类取代了糟糕的老式日期时间类。
获取utc中的当前时刻,使用 OffsetDateTime .

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;

MySQL8.0使用微秒的分辨率,即小数点后的6位。time类具有更好的纳秒分辨率。因此,您可能需要从您的 OffsetDateTime . 使用指定所需的分辨率 ChronoUnit .

OffsetDateTime odt = 
    OffsetDateTime
    .now( 
        ZoneOffset.UTC 
    ) 
    .truncatedTo( ChronoUnit.MICROS ) 
;

通过 PreparedStatement 类似于sql标准的类型的列 TIMESTAMP WITH TIME ZONE 数据类型。对于mysql 8.0,这就是 TIMESTAMP .

myPreparedStatement.setObject( … , odt ) ;

通过一个 ResultSet .

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

要通过某个特定地区(时区)的人们使用的挂钟时间来观察这一时刻,请应用 ZoneId 得到一个 ZonedDateTime 对象。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;  // Same moment, same point on the timeline, different wall-clock time.

关于java.time

java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .
现在处于维护模式的joda time项目建议迁移到java.time类。
要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线 java.sql.* 班级。
从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9添加了一些次要的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android包java.time类的更高版本实现。
对于早期的android(<26),threetenabp项目采用了threeten backport(如上所述)。了解如何使用threetenabp…。
threeten额外的项目用额外的类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,等等。

7hiiyaii

7hiiyaii2#

您可以按以下步骤进行:

OffsetDateTime utc = OffsetDateTime.now(ZoneOffset.UTC);
String sql_date = utc.format(DateTimeFormatter.ofPattern("MM/dd/yyyy")); //here, you can change the format of SQL date as you need

您需要按如下方式导入类:

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

希望有帮助。

相关问题