Gay*_*tri 4 java timezone datetime timezone-offset java-date
我们将日期存储在sqlserver db表中,作为varchar。当在Java代码中将其作为字符串读取然后解析为Date时,它将被读取为UTC(Java代码位于UT中的服务器中)。将日期重新转换为ET时要晚4小时。如何处理将日期存储在此db列中的ET中,以便在Java代码中将其读取为ET。
我们正在研究偏移量,但并未确切了解该怎么做。
表03/29/2019 23:23:03中的Varchar日期//我们希望此日期位于ET中
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date beginDate = sdf.parse("03/29/2019 23:23:03");
Run Code Online (Sandbox Code Playgroud)
//问题是执行此代码时,服务器处于UTC状态。因此beginDate //被解读为UTC时间03/29/2019 23:23:03而不是美国东部时间03/29/2019 23:23:03
预计于03/29/2019 23:23:03 ET实际03/29/2019 23:23:03 UTC
首先,你需要知道一个Date对象不具有时区在所有。这只是时间的瞬间。因此,即使您正确解析了该值,它也将表示正确的时间点,但是稍后可能需要将其转换回东部时间。
其次,您需要意识到存储这样的值会带来歧义-如果存储的值是(例如)11/03/2019 01:30,则本地时间会发生两次-一次发生在夏令时之前,一次发生在之后。如果您始终存储过去的时间,则至少应考虑使用 UTC进行存储-尽管这并不总是正确的答案,特别是如果您要存储将来的日期/时间值,则不然。
对于解析部分,您只需要在中Calendar使用设置时区即可SimpleDateFormat。例如:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York");
Date beginDate = sdf.parse("03/29/2019 23:23:03");
Run Code Online (Sandbox Code Playgroud)
最后,我强烈建议您开始java.time尽可能迁移代码以使用。它是一个比java.util.Dateetc API 更好的API。
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |