纪元时间是普遍的,无论你生活在哪里,纪元时间将保持不变。
在java中,可以使用calendar、date和localdatetime获取当前时间。
java计算出的日期和时间的时间(单位:毫秒)在地球上的任何地方都是一样的吗?或者他们会根据你现在所在的时区而有所不同?
这个问题的原因是,我当前的应用程序需要并行处理不同时区的日期。如果我使用一个特定的时区,应用程序的结果不会与其他时区同步。
对如何解决这个问题有什么建议吗?
例如:比如说,一位顾客在2020年1月1日早上6点在美国购买了一种产品。在服务器的时区中,日期本身是不同的,此事务不会在新加坡时区(2019年)处理,因为偏移量超过18小时。不过,该交易将在2018年进行。
我看到以下可能的解决办法。关于如何进一步进行有什么建议吗?
->为mysql连接配置时区,以确保在处理事务时始终具有正确的日期和时间。但是,这可能不适用于windows server。
->将偏移的小时和分钟永久地添加到时间中,这样,在整个代码中就不需要进一步的计算了。
->修改整个代码,使其到处都使用时区,到处都使用日期、小时和分钟,以确保处理正确的事务。
1条答案
按热度按时间dsekswqp1#
我建议:
在java中使用
Instant
为了某个时间点。它独立于时区(就像纪元时间一样)。它是一个物体而不是一个裸体long
价值观。它以utc格式打印,这比秒数更可读。在mysql中使用
timestamp
数据类型。这是utc时间戳,因此也不受数据库服务器或连接时区的影响。仅用于输入和输出转换为
ZonedDateTime
对于特定时区中的日期和时间。我不记得mysql jdbc驱动程序是否接受Instant
用于储存;如果不是,则转换为OffsetDateTime
存储前以utc为单位。mysql和jdbc驱动程序将确保在任何情况下存储和检索正确的时间点,这是一个很好的优点。有了这些建议,您就不需要为mysql连接配置特定的时区(如果有人配置了时区,也不会造成任何伤害)。您需要为美国、新加坡和其他地方的用户转换输入和输出的日期和时间。这只会影响界面,而不会影响模型。如果编码方式不同,则可能需要对现有的代码库进行更改。
link:related question:针对地理位置不同的用户的日期操作/存储的java最佳实践