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

如何让Spring Boot API返回MySQL日期值的UTC时间,而不是“2018-08-01T04:00:00Z”?

柯树
2023-03-14

我如何让Spring Boot、Java、MyBatis、Jackson和MySQL返回日期的UTC时间而不转换它?查询返回一个日期,如

+------------+
| hitDate    |
+------------+
| 2018-04-24 |
+------------+

API类有一个字段,如

@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss'Z'", timezone="UTC")
Date hitDate;

API调用返回的值如下

"hitDate":"2018-08-01T04:00:00Z"
    null

DATASOURCE=org.apache.tomcat.jdbc.pool.DATASOURCE@67c7bbdf{connectionpool[defaultToCommitt=null;defaultTransactionIsolation=-1;defaultCatalog=null;driverclassname=com.mysql.jdbc.driver;maxactive=100;maxidle=100;minidle=10;initialsize=10;maxwait=30000;testonborrow=true;testonreturn=false;;最大年龄=0;UseLock=false;DataSource=null;DataSourceJNDI=null;SuspectTimeout=0;AlternateUsernameAllowed=false;CommitonReturn=false;RollbackonReturn=false;UseDisposableConnectionFacade=true;LogValidationErrors=false;PropagateInterruptState=false;IgnoreExceptiononPreload=false;UseStatementFacade=true;}

我的MySQL时区设置:

mysql> SHOW VARIABLES LIKE '%zone%';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| system_time_zone | Eastern Standard Time |
| time_zone        | +00:00                |
+------------------+-----------------------+

共有1个答案

李谦
2023-03-14

将JVM时区设置为UTC就足够了

mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"

这适用于Spring Boot V1。这是v2的另一个参数。使用java.time.*、MySQL连接参数或设置MySQL变量是不必要的。使用localdate会出现错误com.fasterxml.Jackson.databind.JSONMappingException:Unsupported field:hourofday,因为JSON Jackson注释使用了时间戳。但即时仍然有效。

我添加了

@SpringBootApplication
public class App extends SpringBootServletInitializer {
    @PostConstruct
    public void init(){
      TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    }
 类似资料:
  • 问题内容: 我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以

  • 问题内容: 我尝试通过以下方式转换此日期: 但是我得到了: 问题答案: “ -0500”是UTC的偏移量,采用RFC822格式。您只想要,没有。 下表列出了Android 文档 : 符号:Z 含义:时区(RFC 822) 种类:(时区) 范例::-0800 :GMT-08:00 :-08:00 当然,我也将亲自指定语言环境:这是一种机器可读格式,而不是面向人类的格式,因此我通常会指定:

  • 问题内容: 我有一个包含表的MySQL数据库。 但是,我找不到在Java中将其作为Java中某种对象返回的方法。 我可以打电话给它,它会返回,但这并不好,因为没有办法比较字符串上的日期等。 我也可以打电话,但这根本不返回时间。 问题答案: 您需要使用Thomas的注释中建议的getTime()或getTimestamp()方法。举个例子… 说出要查询的表格,如下所示: 您可以这样做: 如果要使用J

  • 我在Python上使用mysqlclient包的MySQLdb得到这个错误。 导致错误的代码: 我可以正确插入其余的行,但当我尝试插入这个datetime对象时,它会崩溃。 数据库中的字段是一个timestamp字段,它与其余的datetime对象一起工作,但当它试图使该语句崩溃时,不知道为什么。 提前道谢。

  • 问题内容: 我需要在数据库上更改一些值。 我忘记为表格设置可空值,并且默认情况下将其设置为0000-00-00 00:00:00。 现在,我需要将该值转换为。 字段类型为“日期时间”。 我该怎么做? 我尝试使用典型的方法,但是它不起作用。 问题答案: 您首先需要将该列设置为可空: 然后更新值:

  • 在php.ini我设置了。重新启动了Apache,中的输出显示了正确的时区(Europe/Amsterdam)。现在当我打印时,我得到的是UTC时间,比我们的本地时间晚2小时。但是当我打印时,我仍然得到UTC时间,而我期望的是本地时间。 的输出是: 如果您能帮我了解当地时间,我们将不胜感激。 更新: phpinfo()的输出为: 所以“date.timezone”是正确的,但与“默认时区”有什么区