在我们的数据库中,我们有一个列,其中包含数据库的本地日期/时间(在本例中是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,您将反转偏移量的符号,并将其应用于本地时间值