java时区讲解
来源:互联网 发布:禅道 linux 一键安装 编辑:程序博客网 时间:2024/06/08 18:51
资源
代码地址:https://code.csdn.net/luo4105/javautilclass/tree/master下的TimeZoneTest.java文件。
时区简介
什么是时区
时区是人为划定的,以本初子午线中心(英国格林尼治天文台),将地球划为24个时区。时区向东加一区,时间调快一小时,时区向西加一区,时间调慢一小时。如北京为东八区,日本为东九区,北京时间比日本晚一小时。
时区分类
时区有0时区、东1-12区,西1-12区共24区,(这明明是25个区,莫非当年划分时区的英国人数学太差算错了?)。当然不是,实际上,东12区和西12区划为一个区,称东西12区,东12区占其中一半,西12区占其中一半,从东12区进入西12区,时间调慢1天。
时区的表达
GMT
GMT是即格林尼治平太阳时间,实际就是零时区的时间。用”GMT+偏移量”来表示时区。如“GMT+1”代表东一区,时间就是零时区时间加1小时;”GMT-1”就是西1区,时间就是零时区时间减1小时;我国位于东八区,就是”GMT+8”。
UTC
UTC是标准时间,也就是零时区的时间。
Java中的时区处理
JAVA关于时间的存储
Java存的是从1997/1/1 00:00:00到现在时间的毫秒数,按的是标准时间存储。如setDate(0)就是1997/1/1 00:00:00。但是获取时会加上时间的偏移量,我们是东八区,所以setDate(0)的显示是1997/1/1 08:00:00。
时区之间的转化处理
由于java中存的是标准时区的时间,只是获取时转成本地时区,所以我们只要对时间设置时区,就能获得对应时区的时间。
Java中的时区类:TimeZone
TimeZone是Java中处理时区的类。
获得本地时区
Calendar cal = Calendar.getInstance();TimeZone timeZone = cal.getTimeZone();System.out.println(timeZone.getID());
TimeZone timeZone1 = TimeZone.getDefault();System.out.println(timeZone1.getID());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");TimeZone timeZone2 = simpleDateFormat.getTimeZone();System.out.println(timeZone2.getID());
打印
Asia/Shanghai
Asia/Shanghai
Asia/Shanghai
注意java和php时区中没有asia/beijing,只有asia/shanghai和asia/chongqing,这是民国时期划分的时区。曾经有程序员向sun提出这个问题,但sun不予采纳,认为不是bug。对此我认为应该添加asia/beijing,毕竟新中国以北京时间为标准时间,以示对中国的尊重。毕竟中国是个大国。
设置指定时区
TimeZone timeZone = TimeZone.getTimeZone("GMT+2");System.out.println(timeZone.getID());TimeZone timeZone1 = TimeZone.getTimeZone("Asia/Shanghai");System.out.println(timeZone1.getID());
打印
GMT+02:00
Asia/Shanghai
给时间设置时区
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+2"));cal.setTime(new Date());System.out.println((cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE));SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+2"));System.out.println(simpleDateFormat.format(new Date()));System.out.println(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT+2")))
打印
8-29 5:36
2017-08-29 05:36:35
2017-08-29 05:36:35
获得时区偏移量
Calendar cal = Calendar.getInstance();long offset = cal.get(Calendar.ZONE_OFFSET);System.out.println(offset/60/60/1000);TimeZone timeZone = TimeZone.getDefault();long offset1 = timeZone.getOffset(Calendar.ZONE_OFFSET);System.out.println(offset1/60/60/1000);
打印
8
8
- java时区讲解
- java 时区
- java时区
- Java时区TimeZone与操作系统时区不一致
- java 时区问题 SimpleDateFormat 时区大全
- 关于java时区问题
- java 时区问题
- Java 时区问题
- Java时区问题
- java初始化时区
- java时区解决方案
- java cst时区转换
- 修改java时区
- java设置时区问题
- Java虚拟机 时区问题
- java获取Linux时区
- java时区问题
- java时区问题
- OTG 线结构原理及注意事项
- android通过代码设置横竖屏
- Maven多模块项目依赖管理
- Java反射机制demo(七)—反射机制与工厂模式
- python3获取当前文件的上一级目录
- java时区讲解
- Servlet基础知识
- DMP的设置
- 机器学习算法比较
- 每日一诗词 —— 致橡树
- Python基础学习(三)
- 苹果相关链接和联系方式
- Java正则表达式详解
- MUI 页面传递参数(父传子)