Java - 阻止浏览器重新本地化本地化日期

时间:2014-05-08 20:26:05

标签: java date datetime timezone jodatime

在我们的数据库中,我们有一个列,其中包含数据库的本地日期/时间(在本例中为美国/太平洋地区)。

在我们的服务中,我们的DAO模型将其存储为java.util.Date对象。我们的服务层模型将其存储为DateTime对象。这是一个例子

数据库:2014-04-20 23:22:27

Date date = daoModel.getDate();
System.out.println(Date.toString()); // Wed Apr 30 23:22:27 PDT 2014 (Correct)

// converting to service layer which clients will get
DateTime dateTime = new DateTime(date);
System.out.println(dateTime.toString()); // 2014-04-30T23:22:27.000-07:00 (I am running this on a JRE that is in US/Pacific)

然后在javascript中,我们使用DateTime对象中的字符串执行此操作:

        var formatDate = function(dateString){
            if(dateString){
                var date = new Date(Date.parse(dateString.trim()));
                return twoDigits(date.getFullYear())+"-"+
                        twoDigits(date.getMonth()+1)+"-"+
                        twoDigits(date.getDate())+" "+
                        twoDigits(date.getHours())+":"+
                        twoDigits(date.getMinutes())+":"+
                        twoDigits(date.getSeconds());
            }
            return "";

        }

位于美国/太平洋地区的浏览器输出为:2014-04-30 16:22:27 所以它已经减去了已经本地化时间的7个小时。

因此,对于日期字符串2014-04-30T23:22:27.000-07:00,DateTime类是否假设2014-04-30T23:22:27.000是UTC,-07:00是要获取的偏移量当地时间,还是假设2014-04-30T23:22:27.000实际上是本地时间,而-07:00只是表示时区偏离UTC?

浏览器中我想要的输出是存储在数据库中的本地日期,因此它将是

2014-04-30 23:22:27

但目前的输出是

2014-04-30 16:22:27

我试图理解为什么,当它在浏览器中显示时,偏移量是UTC的-14:00而不是美国/太平洋的-7,以及我如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

如果您的ISO-8601时间戳包含偏移量,例如您询问的值"2014-04-30T23:22:27.000-07:00",则时间代表本地时间,偏移量代表UTC调整,由当地时间表示。

要返回UTC,您可以反转偏移的符号,并将其应用于本地时间值。