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



在我们的数据库中,我们有一个列,其中包含数据库的本地日期/时间(在本例中是US/Pacific)。

在我们的服务中,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 "";
        }

在位于US/Pacific的浏览器中输出为:2014-04-30 16:22:27因此,它已经从已经定位的时间中减去了另外7小时。

那么对于日期字符串2014-04-30t23:22:27 -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,以及我如何解决这个问题。

任何时候你有一个ISO-8601时间戳包含一个偏移量,比如你问的值,"2014-04-30T23:22:27.000-07:00",时间表示本地时间,偏移量表示从UTC调整,由该本地时间表示。

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

最新更新