将UTC时间戳插入到MySQL中 - 夏令时时区

问题描述:

我有一个Java客户端,它以MySQL格式在UTC数据库中插入(通过CSV和'LOAD DATA INFILE')时间戳(键入TIMESTAMP)。我的服务器的时区是“America/New_York”,我需要保留夏令时信息。 11月5日凌晨2点,时间从美国东部时间变为东部时间,时钟从早上1点恢复到凌晨1点。例如,11月5日上午1:30,发生两次;一次在美国东部时间,一次在东部时将UTC时间戳插入到MySQL中 - 夏令时时区

如何让服务器区分两者?例如,如果我想插入'2017-11-05 01:30:00'EDT,有没有办法告诉MySQL告诉'2017-11-05 01:30:00'EDT(在时间变化)和'2017-11-05 01:30:00'美国东部标准时间(时间变化后)当我插入值?如果有问题,我的Java应用程序具有两个时间戳的时区信息。

我想保持服务器的全球时区为'America/New_York',因为用户访问这些数据并希望它们显示在当地时间。

我想到的解决方案是从Java客户端将连接的时区设置为UTC,将值插入UTC,然后重新设置连接的时区,但我想知道是否有更好,更“标准”解。

+0

如果该值是在UTC,没有DST歧义。 '2017-11-05T01:30 EDT'与'2017-11-05T05:30 UTC'相同,'2017-11-05T01:30:00 EST'为'2017-11-05T06:30 UTC'。 – 2017-09-22 17:41:38

+0

我知道。我的问题是,我在Java中有2个时间戳。一个是'2017-11-05 01:30:00'EDT,另一个是'2017-11-05 01:30:00'EST。我如何在TIMESTAMP类型的MySQL字段中插入这两个字段,即UTC?我需要先将它们转换为Java中的UTC,然后插入它们,还是有更好的方法? –

+0

当你说* timestamp *,你的意思是一个'java.sql.Timestamp'或其他类型? – 2017-09-22 17:50:10

+0

尽管是一个很棒的API,Joda-Time处于维护模式,并正在被新的API取代。即使在[joda的网站](http://www.joda.org/joda-time)中,它表示:**“请注意,Joda-Time被认为是一个大部分”完成“的项目,没有计划进行重大改进。使用Java SE 8,请迁移到java.time(JSR-310)。“** - 无论如何,OP告诉你正在使用'ZonedDateTime'(Java 8),所以真的没有理由使用Joda-Time。 – 2017-09-22 19:29:27