【发布时间】:2018-02-16 00:08:48
【问题描述】:
我正在开发一个从Google TimeZone API 获取数据的应用程序。
只是我有时间在地球上所需的地方,以毫秒为单位。
例如:1504760156000 它显示的是伦敦的日期时间
2017 年 9 月 7 日星期四 09:55:56
由于我在 UTC 的 TimeZone +05:00 中,如果我操纵 1504760156000 这些毫秒,它将显示整个日期时间,如下所示:
2017 年 9 月 7 日星期四 09:55:56 GMT+0500(巴基斯坦标准时间)
但我想展示:
2017 年 9 月 7 日星期四 09:55:56 GMT+0100(英国夏令时间)
问题是:我有正确的伦敦日期和时间,但可以在不更改时间的情况下显示/更改时区,因为伦敦的时间是正确的。
更新
在得到一些 cmets 之后。在我的例子中你没有让我在这里。
假设我在巴基斯坦,这里的时间是1:55 PM,所以我通过我的应用程序询问 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"
Google API 以针对伦敦的以下 JSON 响应我。
{
"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);
正如我所说,我正在处理本地时区的结果,所以当时它给了我以下结果:
2017 年 9 月 7 日星期四 09:55:56 GMT+0500(巴基斯坦标准时间)
但我知道 API 给了我正确的时间。问题是与 UTC 的本地偏移量。我只想把GMT+0500改成GMT+0100
【问题讨论】:
-
this 的回答可能会对你有所帮助。
-
@kcg 不,你没有得到我的问题。我想在所需的时区中获得结果,而不是在我自己的时区中
-
但时间戳 1504760156000 相当于巴基斯坦的 09:55 和伦敦的 05:55。在伦敦显示为 09:55 是不正确的。
-
@Hugo,no, timestamp 1504760156000 是我从 Google API 获取的伦敦时间,但我在巴基斯坦,如果我在本地系统上操作它,它将获得默认 +5 TimeZone 但想显示伦敦时间区域在巴基斯坦。仔细阅读我的问题
-
@Zaid Mizra ,那你最好把巴基斯坦当地时间转换成伦敦时间.....
标签: android datetime google-api timezone timezone-offset