我有字符串格式的 json 输入中的本地日期 dd-MM-yyyy HH:mm:ss
格式[让它是任何格式都没有问题],在 header 中有一个单独的字段时区[例如:CST、CDT等]。在java中,当我尝试创建具有此值和时区的日期时,它是使用我的系统[jvm running system]时区创建的。
我需要保留输入时区输入的确切日期和时间。 我该怎么做 ?
我什至尝试将带有 @DateTimeFormat
的日期对象放入 dto 而不是字符串中,但这不起作用。
我想要一个像这样的方法从输入日期字符串和时区获取本地日期。
public Date getLocalDate(String dateString, String localTimeZone) {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss a");
formatter.setTimeZone(TimeZone.getTimeZone(localTimeZone));
return formatter.parse(dateString);
}
输入:dateString:“20-04-2019 20:15:00 AM”localTimeZone:“CDT”。
预期输出:值为 20-04-2019 20:15:00 AM CDT 的日期对象。
实际输出:与 IST-CDT 相同的日期与 IST 时区的时差
最佳答案
对于 Date
对象的真正含义存在误解。自'01-01-1970 00:00:00 UTC'
以来仅过了几毫秒。换句话说,它始终是 UTC 日期/时间,当您尝试打印它时,默认格式化程序会隐式将其转换为您的本地时区。
如果您想同时存储即时(即 UTC 日期/时间)和时区,则必须使用Calendar
对象。但无论如何,如果你想在 Oracle 中同时存储时间和时区,你应该直接存储一个字符串,或者一个日期和一个字符串(对于时区),因为据我所知,Oracle DATE 字段没有时区的概念。
关于java - 需要在 spring-boot 应用程序中将 Json 输入中的本地日期保存到 oracle DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55947759/