我有一个基于客户端-服务器的java应用程序。客户端以美国/太平洋时区运行,服务器以UTC运行(我正在以UTC保存数据库中的时间)
例如,如果我将日期保存为太平洋时间 09:00,则它在数据库中保存为 14:00 小时 UTC。
当我从数据库读回此时间时,应用了夏令时,它现在转换为太平洋时间 08:00 而不是 09:00 小时。
因此,当从太平洋时间转换为 UTC 时,不考虑夏令时,但在从 UTC 转换回太平洋时间时,应用的时间不一致。
在数据库中,列类型是 TIME,在 java 中,我将其读取到日期对象中。
我该如何处理?
通常,数据库服务器决定时间,是否应用夏令时,以及时区,UTC是标准。
建议:
- 也许您想将客户端的时间设置为字符串字段,其中包含时区 PST、EST 或其他任何时区的另一个字段。
- 仅为时区创建一个字段,并计算显示到客户端的时间。
我认为你能做的最好的事情就是确保尽可能多的时间处理完全不受时区限制。 例如,自Unix时代以来的millis。 然后,仅在向用户显示时区数据之前应用时区数据。
因此,在这种情况下,当您向服务器报告以及从服务器检索时,不要应用任何本地时间假设。 这样,就不可能对数据进行不匹配的时区或DST处理。
撇开所有这些不谈,我建议您手动使用getLong
并自己构造 Date 对象。