Java 将具有当前UTC时间的日期时间插入数据库

Java 将具有当前UTC时间的日期时间插入数据库,java,mysql,datetime,java-8,Java,Mysql,Datetime,Java 8,我试图通过sql中的GETUTCDATE()函数将当前UTC时间的日期时间插入mysql数据库。它因“函数GETUTCDATE不存在”而失败 是一种从Java获取sql datetime格式的当前UTC时间并将其作为字符串插入的方法吗 我遇到的另一个大问题是,我需要将上述utc datetime对象转换为本地时区,但我真的不知道如何通过标准java api实现这一点。您可以按如下方式完成: OffsetDateTime utc = OffsetDateTime.now(ZoneOffset.UT

我试图通过sql中的GETUTCDATE()函数将当前UTC时间的日期时间插入mysql数据库。它因“函数GETUTCDATE不存在”而失败

是一种从Java获取sql datetime格式的当前UTC时间并将其作为字符串插入的方法吗


我遇到的另一个大问题是,我需要将上述utc datetime对象转换为本地时区,但我真的不知道如何通过标准java api实现这一点。

您可以按如下方式完成:

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;
您需要按如下方式导入这些类:

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;

希望能有所帮助。

您可以按如下方式进行:

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;
您需要按如下方式导入这些类:

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;
希望能有所帮助。

tl;博士 java.time 现代的解决方案使用java.time类,这些类在几年前就取代了糟糕的老式日期时间类

使用获取UTC中的当前时刻

MySQL 8.0使用的分辨率为,小数点后六位。time类具有更高的分辨率。因此,您可能希望从
OffsetDateTime
中删除。使用指定所需的分辨率

通过发送到类似于SQL标准
时间戳和时区数据类型的列,发送到数据库。对于MySQL 8.0,这将是一种类型

并通过
结果集进行检索

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
要通过特定地区(时区)的人们使用的挂钟时间来查看这一时刻,请应用
ZoneId
获取
zoneDateTime
对象

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

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

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

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(tl;dr java.time 现代的解决方案使用java.time类,这些类在几年前就取代了糟糕的老式日期时间类

      使用获取UTC中的当前时刻

      MySQL 8.0使用的分辨率为,小数点后六位为。java.time类的分辨率更高。因此,您可能希望从
      OffsetDateTime
      中选择所需的分辨率

      通过发送到类似于SQL标准
      TIMESTAMP WITH TIME ZONE
      数据类型的列,发送到您的数据库。对于MySQL 8.0,这将是一种类型

      并通过
      结果集进行检索

      OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
      
      要通过特定地区(时区)的人们使用的挂钟时间来查看这一时刻,请应用
      ZoneId
      获取
      zoneDateTime
      对象

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

      关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

      该项目现已启动,建议迁移到类

      要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

      您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
      java.sql.*
      classes

      从哪里获得java.time类

      • 、和更高版本-标准Java API的一部分,带有捆绑实现。
        • Java9添加了一些次要功能和修复
        • 大多数java.time功能都在中向后移植到Java6和Java7
        • 更高版本的Android捆绑包实现了java.time类

        • 对于早期的Android(您是否尝试过从Java提供值?我不知道Java中sql的日期时间对应于什么,所以我不确定传递什么。假设您在MySQL中使用的是
          datetime
          或其他适当的日期时间数据类型(您应该这样做),不要插入字符串。如果是Java中的值,请将其作为Java.time中的适当日期时间类型,例如中的
          OffsetDateTime
          。如果您在MySQL中的类型是
          datetime
          ,我相信Java中的
          LocalDateTime
          最合适,但请注意,这两种类型都没有定义唯一的时间点,因为它们不包含时间zone.you尝试过从Java提供值吗?我不知道Java中sql的日期时间对应于什么,所以我不确定传递什么。假设在MySQL中您使用的是
          datetime
          或其他适当的日期时间数据类型(您应该这样做),不要插入字符串。如果是Java中的值,请将其作为Java.time中的适当日期时间类型,例如中的
          OffsetDateTime
          。如果您在MySQL中的类型是
          datetime
          ,我相信Java中的
          LocalDateTime
          最合适,但请注意,这两种类型都没有定义唯一的时间点,因为它们不包含时间问题是:“并简单地将其作为字符串插入”对不起,我错过了这一部分,不是吗?这个问题真的没有意义,是吗。
          GETUTCDATE()
          返回一个日期时间对象,那么他为什么想要字符串呢?也许你能告诉他正确的方法goNo,不,不,不正确。你在混合现代的java.time类(
          OffsetDateTime
          ZoneOffset
          )和可怕的旧遗留类(
          SimpleDataFormat
          java.util.Date