在说时区问题的时候,估计很多人都很不屑。因为获取时区的方法真的太简单了。尤其是很多面向百度编程的iter。

比如,获取时区的方法一句就能搞定:

String timeZone =“GMT”+String.valueOf(TimeZone.getDefault().getRawOffset() / (3600 * 1000));

当时很不屑这个问题的时候。我就知道你肯定会犯的几个你自己都可能不知道的错。就是关于夏时令和冬时令的问题。

那么再说这个问题之前,我们先说说国际上对于时区的规定

时区

1884年在华盛顿召开的国际经度会议(又称国际子午线会议)上,规定将全球划分为24个时区(东、西各12个时区)。

如下图所示:

全球同一时刻不同时区的本地时间不同例如中国时间:10:00 AM

对于美国西部时间:18:00 PM(冬令时)

 17:00 PM(夏令时)

1. GMT VS UTC

GMT 全称 Greenwich Mean Time,中文为格林威治标准时间。

UTC 全称 Universal Time Coordinated, 中文为协调世界时。

GMT和UTC都是代表0零时区的时间,两者相等。UTC是1972年之后引入的概念,是GMT的后继,现广泛应用于科技领域。

2. PST

全球分为24个时区之后,从UTC/GMT 开始往西依次表示为UTC/GMT - 1,-2……,往东表示为UGC/GMT+1,+2……。

除了UTC/GMT之外,还有一个很常见的时区:PST。

PST 全称 Pacific Standard Time,太平洋标准时间,等同于UTC/GMT -8,既西八区,被北美国家使用。

冬令时、夏令时

地球自转方向从西向东,所以东边更早看到新一天的太阳。各地区在时区概念的基础上,时间更接近于太阳时(最简单的理解就是太阳直射时,当地时间基本接近12点)。

昼夜长短会随着四季变换,出于减少能源消耗的目的,提出了冬令时、夏令时的概念。

在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。

冬令时通常代表使用当地的标准时间,夏令时实施期间时钟拨快一小时,相当于时区往前(东)进一个。

每年会对时间进行两次调整,如下图所示:

也就是说,地球上并不是每一天都是24小时的。也有一天23小时或25小时的存在。

夏令时起始和结束的两天,其中开始的一天23小时,结束的一天25小时。

具体好奇的可以进入这个传送门看看究竟。博主在这里就不再具体讲夏令时和冬令时的问题了。小饼干就把项目中遇到的坑跟大家分享一下:

我其中的一个项目主要服务欧美客户,春天,因为时区问题,被报了bug(美国市场部同事报的),我检查了代码,然后没发现有问题,但还是改了。然后同年冬天,再次因为这个问题被报了bug。我很郁闷,这个问题明明解决过,并且验证过的啊。为什么又出现了。然后我始终找不到我具体哪里出问题了。后来,我很奇怪美国时间为什么不对(因为办公室之前所在地之前相差18个小时,后来相差17个小时)。美国人不知道中国时区不分夏令时和冬令时(备注俄罗斯也不再区分夏令时和冬令时,但是目前国际上仍然有超过110个国家和地区区分夏令时和冬令时)。然后我就查阅了资料,明白了夏令时和冬令时的问题。

好了,故事就讲到这里,我们说说怎么解决这个问题吧。我也曾面向百度编程,查阅了这方面的资料,试过其他踩过坑的大佬写的方法,但是最后都不能达到随意切换时区和时令都测试通过的结果。(大家可以自行百度尝试其他方法和各种时区切换和时令切换测试)。

最后只能靠自己了。我回想为什么会出现导致时区的问题,并且一想,不管系统的时间怎么变,他都在相应时区内变化。一旦超过,就自动出现时区也不对了。所以这个问题就非常简单了。只需改一个地方就解决:

public static String getTimeZone() {String timezone;//  这里注释的是之前获取到的时区,但是不分夏令时和冬令时(格林威治时间划分的)//        int _t = TimeZone.getDefault().getRawOffset() / (3600 * 1000);
//         改为如下,获取系统的时间并且计算出时区就可以了int _t = TimeZone.getDefault().getOffset(System.currentTimeMillis()) / (3600 * 1000);timezone = String.valueOf(_t);timezone = "GMT" + timezone;return timezone;}

好了,这样就解决了同一个时区,因为夏天和冬天,不在同一个时区的问题。就解决了不管怎么切换时区,都能拿到改时间应该所在的时区的问题了。

安卓国际化开发中的时区问题之——夏令时,冬令时相关推荐

  1. Delphi D10.X安卓APP开发中获取硬件信息及手机号

    Demo与代码已上传到CSDN下载. 这里简单说一下代码内容,完整代码请自行下载,不清楚的欢迎留言交流. 前言 演示Demo使用了我自己开发的一个控件,TLayoutPro <Delphi D1 ...

  2. 项目开发中的时区问题汇总

    前言 背景:在操作日期时经常会出现比数据库多或少8小时的情况 原因:不同软件或系统的默认时区不一致导致的 几个时间名词: GMT:格林威治标准时间 UTC:世界协调时间 DST:夏日节约时间 CST: ...

  3. edittext 选中焦点在最后_安卓开发中EditText的焦点改变处理(获取焦点和失去焦点交互变化)...

    在安卓项目开发中,我们经常会遇到一些对EditText的处理问题,包括对EditText的焦点的改变,我们需要结合实际情况对其进行获得焦点,打开输入法和失去焦点,关闭输入法的交互操作. 我在这里介绍一 ...

  4. Delphi D10.X安卓APP开发让原生Toast显示图片

    上次完成了<Delphi D10.X安卓APP开发中简单使用原生Toast>,可以快速方便的使用Toast,并且可以自定义显示位置.在此基础上,今天我们来实现在Toast中显示图片的方式. ...

  5. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  6. Android Studio安卓开发中使用json来作为网络数据传输格式

    如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验. 一开始我在android studio中导入那6个包,那6个包找了非常久,因为放 ...

  7. 安卓开发中的USB转串口通讯

    安卓开发中的USB转串口通讯 本文使用GitHub上开源的"hoho.android.usbserial"USB串口库.该库基于"Android USB Host API ...

  8. 安卓开发中的重力感应传感器

    2019独角兽企业重金招聘Python工程师标准>>> 安卓开发中拥有多种传感器,google提供了11种传感器供应用层使用:加速度.磁力.方向.陀螺仪.光线.压力(返回当前压强). ...

  9. 安卓开发中ToggleButton按钮的使用

    ToggleButton(开关按钮)是Android系统中比较简单的一个组件,是一个具有选中和未选择状态双状态的按钮,并且需要为不同的状态设置不同的显示文本.下面以一个简单的控制室内设备的开关为例来介 ...

最新文章

  1. 转: 如何实现jQuery的Ajax文件上传
  2. Windows之建立C++开发环境
  3. Hibernate学习笔记--第一个Hibernate框架程序
  4. ASP.NET MVC 3.0学习系列文章--Razor and ASP.NET MVC 3.0
  5. keil用c语言怎么编辑器,用keil软件编写单片机程序的步骤
  6. github gists_Eclipse中的Github Gists
  7. 从挂科学渣到史上学历最低诺奖得主,他用17年时间重新证明自己
  8. 八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线
  9. XML学习笔记(三)
  10. PostgreSQL中生成的列
  11. 如何在C/C++中动态分配二维数组
  12. 【leetcode 简单】 第六十六题 用栈实现队列
  13. wireshark抓包红色_wireshark抓包常见提示含义解析
  14. html边框双箭头,纯CSS如何绘制双箭头
  15. win10 uwp 录制任意应用屏幕
  16. 2021年起重机司机(限桥式起重机)免费试题及起重机司机(限桥式起重机)试题及解析
  17. 项目上线后中英文翻译问题解决
  18. pycharm虚拟环境下安装mysqlclient失败
  19. SMA、EMA与双均线策略
  20. C语言编程题—N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,

热门文章

  1. 生活随记 - 不懂就问心老人不老
  2. 魅力城市:内蒙古满洲里
  3. MySQL安装—解压版
  4. Android恶意软件特征及分类
  5. 美通企业日报 | 瑞士莲国内首家快闪店开幕;全球首家健力士醇黑坊亮相上海...
  6. java中cut是什么意思_cut和paste用法
  7. python之获取网络时间
  8. 【ESP系列】ESP8266的AT固件烧录
  9. swoole 项目实战——实现简单聊天室
  10. 15分钟分析伦敦银今日走势