一般我们应用碰到要对时间的处理都是很麻烦的,比如实现万年历,会用到农历公历阳历阴历..

还有就是今天我想和大家一起讨论的夏令时,时差的问题.

之前做过一款世界天气+时钟的应用,包含全球3万多个城市的天气和时间.

天气,时差这些问题都好说,就是夏令时这一块把我弄烦了.不过想想也正常,霸气外露的IPHONE前不久不也陷入过夏令时的困扰吗

一般要做这类和时间打交道的应用,我们一定有一块数据是关于时差的.

比如  China    offset:+8

我们根据这个offset  再和格林威治时间计算就能得到China的当前时间.

而进入夏令时时,有的地区(注意是地区不是国家,美国有些国家采用夏令时,有的却不- -#).这个offset会根据是否是夏令时而增减1小时左右(我记得貌似有些进入夏令时的地区还有半个小时偏差的)

而现在最大的困难是---你无法得知某个城市是否进入夏令时!!! 刚开始我天真的以为,能得到类似GMT+8:00的offset就能得知这个地区是否施行夏令时,但是这就大错特错了.因为我上面提到过,同一个国家,甚至同一块区域都不确定是否统一的施行夏令时.也就是说都属于GMT+5:00这样一个timezone的地区,有的可能使用有的可能没使用夏令时.

我理解的是时区是按经度划分的,每15度是一个时区,所以刚好一共是24个时区. 在GMT+5:00的地方,然后不同纬度的施行夏令时不同

所以我们从数据中得到的offset(+8:00) 不能直接得到夏令时的使用情况,而且这个offset不一定是正确的,它应该随夏令时而改变.

我们现在来看看android 的 API:

TimeZone.getTimeZone (String specifiedID) 首先和我们要处理的问题相关有这么样一个方法,   但是参数是一个String类型的specifiedID

这个specifiedID怎么得到呢?我们会用到 String[] specifiedIDs= TimeZone.getAvailableIDs(offsetGMT * 60 * 60 * 1000);

就得到specifiedIDs一个数组, 然后里面有很多specifiedID 比如: Asia/Brunei , Asia/Choibalsan , Asia/Chongqing ....

根据这个specifiedID 我们就可以得到这个TimeZone对象了

String[] specifiedIDs= TimeZone.getAvailableIDs(offsetGMT * 60 * 60 * 1000);

String timeZoneID = TimeZone.getTimeZone(specifiedIDs[0]).getID();

Time time = new Time(timeZoneID);

然后android有自动帮你实现夏令时,我们得到的time就可以直接使用,会随着进入夏令时时间发生变化.

最后遗留一个问题,就是关于specifiedID的问题 ,我这里是默认取的第一个

TimeZone.getTimeZone(specifiedIDs[0]).getID();

这样使用完全不精确的.

如果有人知道有更好的方法,麻烦指教一下

android夏令时,android 对夏令时的处理相关推荐

  1. android之android.intent.category.DEFAULT的用途和使用

    1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity , ...

  2. android:layout_with=,android – 难以理解layout_alignWithParentIfMissing

    这仅适用于使用RelativeLayout时. 如果您将元素设置为一个其他元素,则表示该元素位于该元素的左侧. 但是如果这个元素会丢失,因为你删除它,例如它将与父对齐. 举个例子 android:la ...

  3. [Android Studio] Android Studio常用快捷键

    [Android Studio] Android Studio常用快捷键 (会持续更新)这边讲的常用快捷键是指做完Keymap到Eclipse后的,不是纯Android Studio的,这边主要讲下比 ...

  4. Android利用android:indeterminateDrawable来实现ProgressBar三种方式

    方式1:(效果为补间动画一样) [html] view plaincopyprint? <ProgressBar android:layout_width="wrap_content& ...

  5. Android之Android实现浮层的上下滑动(支持内部添加View)

    前言 我K,今天居然是情人节,对于资深的单身狗来说,简直是个噩耗,今天注定是各种秀恩爱,心塞中.... 话题到此结束,管他什么情人节,今天给大家带来的是一个浮层的上下滑动,浮层滑动时分三种状态:全部显 ...

  6. Android 解决Android的TextView和EditText换行问题

    Android 解决Android的TextView和EditText换行问题 参考文章: (1)Android 解决Android的TextView和EditText换行问题 (2)https:// ...

  7. Xamarin Android教程Android基本知识版本介绍与系统介绍

    Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...

  8. 【Android】Android 设置Activity窗体 不显示标题和全屏显示

    [一]Android 设置Activity窗体 不显示标题 android:theme="@android:style/Theme.NoTitleBar" 1 <activi ...

  9. [Android]《Android艺术开发探索》第一章读书笔记

    1. 典型情况下生命周期分析 (1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart方法就会被调用. (2)当用户打开新的Activity或者切换到桌面的时候,回调如下 ...

  10. 基于ubuntu16.04多用户编译android N(android 7.1)系统提示ninja_wrapper错误问题

    基于ubuntu16.04多用户编译android N(android 7.1)系统提示ninja_wrapper错误问题 Ubuntu 1604系统除了root,还有kandi和sundi两个用户, ...

最新文章

  1. 根据镜像安装oracle插件,docker镜像alpine中安装oracle客户端
  2. iOS scrollToItemAtIndexPath 无效的解决方案
  3. 不可错过的CMS学习笔记
  4. MspEmu W.I.P.
  5. P1982 小朋友的数字
  6. Android activity-alias 的使用
  7. win7双系统安装openSUSE13.2解决【引导加载器安装期间出错】问题
  8. SqlSession接口和Executor
  9. 系统学习深度学习(十四)--权重初始化Xavier
  10. java编写个倒计时_怎么编写一个倒计时java程序?求具体步骤!
  11. 【2019牛客暑期多校训练营(第八场)E】Explorer【线段树分治维护图连通】
  12. Matlab Astar算法简单对比分析
  13. 优秀的软件测试简历是什么样的?
  14. 586A 586B线序
  15. 相敬如宾 你将获得更多敬重
  16. 论文常用 | FineBI v6.0 新图表 | 箱形图
  17. AM5728高性能SOC,满足工业协议支持、大数据计算、实时控制等需求,适用于图像处理、电力协议管理
  18. 复旦大学邱锡鹏教授:语言模型即服务,走向大模型的未来
  19. springSecurity 登陆失败前台显示账号密码登录错误
  20. 高数-极限-存在与连续1

热门文章

  1. 计算网络节点模块内连通度(within modular degree)和模块间连通度(between modular degree)
  2. 手把手教你用 Python 编写 3 个实用脚本,早掌握早下班~
  3. 东坝电子计算机学校招生条件,人大附中朝阳分校东坝校区收费标准(学费)及学校简介...
  4. [渝粤教育] 南阳师范学院 英美文学选读 参考 资料
  5. 周鸿祎一进场,造车新势力格局应声变了
  6. SEO真的可以刷关键词排名吗?
  7. HTML5为输入框添加语音输入功能的实现方法
  8. Oracle VM VirtualBox 官网下载安装(一)
  9. 阿里云短信服务签名和模板类型不一致问题
  10. 铠装跳线与普通光纤跳线的区别