我正在开发一款应用程序,该应用程序从 Google TimeZone API
中获取数据。简单来说,我有地球上所需位置的毫秒时间。
例如: 1504760156000
显示的是伦敦的日期时间,即:
Thu Sep 07 2017 09:55:56
由于我的时区是比UTC快 +05:00
,如果我操作 1504760156000
这些毫秒数,将会显示完整的日期时间,如下所示:
Thu Sep 07 2017 09:55:56 GMT+0500 (巴基斯坦标准时间)
但我想显示:
Thu Sep 07 2017 09:55:56 GMT+0100 (英国夏令时)
问题在于:我有正确的伦敦日期和时间,但无法改变时区而不改变时间,因为伦敦的时间是正确的。
更新
得到一些评论后,你没有理解我的例子。
假设我在巴基斯坦,现在时间是下午1点55分,所以我通过我的应用程序向 GOOGLE API 询问此刻伦敦的时间。 Google API 告诉我伦敦时间是 1504760156000
(上午9:55)毫秒。如果我将这些毫秒数转换为 Date
对象,它将像下面这样打印:
Date date =new Date(1504760156000)
2017年9月7日 09:55:56 GMT+0500(巴基斯坦标准时间)
它将根据我的本地时区进行操作,但我想要以下结果
2017年9月7日 09:55:56 GMT+0100(英国夏令时)
更新2
我已经准备好了UTC中以秒为单位的时间戳,因为Google时区API需要以秒为单位的UTC时间戳格式。
"https://maps.googleapis.com/maps/api/timezone/json?location="+Latitude +","+Longitude+"×tamp="+currentTimeUTCinSeonds+"&key="API KEY"
谷歌API对伦敦的响应如下所示:
{
"dstOffset" : 3600,
"rawOffset" : 0,
"status" : "OK",
"timeZoneId" : "Europe/London",
"timeZoneName" : "British Summer Time"
}
根据文档:
计算本地时间
给定位置的本地时间是时间戳参数和结果中的dstOffset和rawOffset字段之和。
我将结果总结为
timestamp+rawoffset+dstoffset*1000='1504760156000'
(在我尝试时)。项目代码
Long ultimateTime=((Long.parseLong(timeObject1.getDstOffset())*1000)+(Long.parseLong(timeObject1.getRawOffset())*1000)+timestamp*1000);
timeObject1.setTimestamp(ultimateTime); //its Sime POJO object to save current time of queried Location
Date date=new Date(ultimateTime);
date1.setText("Date Time : "+date);
如我所说,我正在使用本地时区操作结果,因此它在那个时间给了我以下结果:
Thu Sep 07 2017 09:55:56 GMT+0500 (巴基斯坦标准时间)
但是我知道 API 给了我正确的时间。问题是本地与 UTC 的偏移量。 我只想将 GMT+0500
更改为 GMT+0100
1970-01-01T00:00Z
以来的毫秒数,没有其他含义。这个值对应于UTC时间的04:55,在伦敦是05:55,在巴基斯坦是09:55,在东京是13:55等等。如果您包括从API获取此值的代码,我们可能会更清楚地了解发生了什么。 - user7605325java.util.Date
类型的吗?也许如果你包含调用API和创建日期的代码,我们可以更好地了解发生了什么情况。 - user7605325