时区除了我们经常用的东八区,新需求是根据经纬度获取当地时区,并且将设备上的时区更新到当前时区
获取当前位置的经纬度是基本要求,本项目中有获取全球任意城市的天气需求,所以两个功能我就结合起来做了
1、获取天气信息 Api地址
Current weather data - OpenWeatherMap
有几种方式获取到城市的天气,而且当前API是免费获取,我的需求是根据经纬度获取
我用的是这个方法,可以获取到我所需要的尽可能详细的信息
其中天气接口返回的值里面有一个关键字
timezone字段的意思就是当前时区相对标准时区的偏移量,单位是秒
计算相差时间: 32400 / 60 / 60 = 9小时
经纬度请求回来的接口里面会包含这个偏移量
天气信息全部在接口中返回,timezone是我获取下一步时区id的关键字段
2、获取时区id
TimeZone类是获取时区的关键类,里面有多种获取方法,其中的
getAvailableIDs
有带参和不带参两种
a、不带参
返回设备上所有的时区名,是一个String数组, 可以用来设置当前设备时区
b、带参数
带的参数就是便宜量,
注意这个偏移量是毫秒 ,
这个方法返回的值也是一个数组,是根据当前偏移量计算返回的时区名数组,这个数组对我来说就是设置时区的关键
获取到当前经纬度返回的时区名数组 timeZoneName[];
3、设置时区
一个偏移量可能包含了多个时区名,比如中国是东八区,你传入28800,返回的是所有东八区的时区名
Asia/Shanghai
Asia/Hong_Kong
Asia/Taipei
这几个都是东八区的时区名,设置任何一个都是中国大陆的标准时间,所以当我们通过getAvailableIDs(int offset)获取到时区名称数组的时候,取其中任意一个设置的都是正确的时间
设置时区代码
AlarmManager mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (mAlarmManager != null)
mAlarmManager.setTimeZone(name);
当设置完时区之后,我发现我的页面上时间并没有更新,所以我在1秒钟延迟之后,发一个event手动更新UI,也就是再获取一次设置完时区之后的当前时间,就OK啦
@Subscribe(threadMode = ThreadMode.MAIN)
public void setTime(Status.TimeEvent event) {
String formattedTime = DateUtils.getFormatedDataHM2(System.currentTimeMillis(), "");
if (!DateUtils.get24HourMode(getContext()))
formattedTime = DateUtils.getFormatedDataHM();
mTime.setText(formattedTime);
时区除了我们经常用的东八区,新需求是根据经纬度获取当地时区,并且将设备上的时区更新到当前时区获取当前位置的经纬度是基本要求,本项目中有获取全球任意城市的天气需求,所以两个功能我就结合起来做了1、获取天气信息 Api地址Current weather data - OpenWeatherMap有几种方式获取到城市的天气,而且当前API是免费获取,我的需求是根据经纬度获取我用的是这个方法,可以获取到我所需要的尽可能详细的信息其中天气接口返回的值里面有一个关键字timezon.
GPS坐标(可以从GPS设备,蜂窝API或其他来源获得)
时区ID (又名Olson名称)
在正常使用中,TzCfg方法在固件setup()中配置本地时间设置,但是也可以从固件loop()中调用这些方法以更新移动设备的本地时间设置,也可以从粒子函数中调用这些方法以通过网络命令更改本地时间设置。
时区信息保存在EEPROM中,如果在没有网络连接的情况下设备重新启动,则库会将本地时间配置为最近的时区设置。
由于IANA会定期更新其时区数据库,因此TzCfg会执行定期的“刷新”操作,如果相关数据(如下一个DST转换的时间)已更改,它将更新EEPROM。
TzCfg安排了DST过渡后会自动执行。 这是本地操
A:先根据经纬度获取当地时区 (注):计算的区时=已知区时-(已知区时的时区-要计算区时的时区)(注:东时区为正,西时区为负)
B:然后根据本地时间与当地时区推算出当地时间
C:这是我百度找到怎么计算时区与时间
计算时区
* 计算时间
* 1 先根据经度计算出时区
* 2 然根据本地时区推算出其他地方时间(已中国上海为例)
* 东区快一个小时
* 西区慢一个小时
* 东经和西经,分别用“E”和“W”表示。
* 东经为正数,西经为负数。
* 计算的区时=已知区时-(已知.
1: 根据地理常识,我们知道时区有24个,经度/15=商+余数,此时的商就是是时区,给大组长说了一下,不沾边
又过了几天
2:发现django自带的模块timezone,也叫时区,于是就顺着这条道开始查找,发现一个插件----pytz
研究这个模块的时候,发现pytz.all_timezones() 可以输出所有的时区,一查看长度有592个,这么多的时区
当初自...
目的:查遍资料也没见到网上有现成的根据经度lon,求出当前经度对应的时区的java实现。因此根据已有原理编写相应的java实现
问题描述:给定经纬度,返回时区编号:
* 根据经度获取时区
* @param currentLon
* @return
public static int caculateTimeZone(double currentLon) {
int timeZone ;
int shangValue
https://zhidao.baidu.com/question/574747751.html
源代码有几次错误,已经改成可以使用的C版本,计算结果和查询网站的结果会有1分钟左右的误差。
测试网站地址https://richurimo.51240.com/121.126078__jw__29.026046__richurimo/
指地球上的一块区域使用的同一时间定义,以经度划分,每个时区横跨15经度,总共24个时区,东西各12个时区,北京时间是东八区。
关于时间戳
指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
时间戳和时区没有关系。时间戳在哪个时区都是一样的,它只是一个计数。...