Java中输出时区的缩写_Java中的时区转换小结
时间加减
Date currentDate = new Date(System.currentTimeMillis());
Calendar cal = Calendar.getInstance();
cal.setTime(currentDate);
cal.add(Calendar.DAY_OF_MONTH, -1);//减一天时间
startTime=outputFormat.format(cal.getTime());
开发跨地域的程序时,常需要进行时区转换,一个设计优良的系统,也必须考虑对多时区的支持。JDK提供了很多方便的机制和工具,来帮助我们解决时区转换问题。
解决跨时区问题的关键在于时间的记录形式。若将时间单纯的记录成“2011-05-14 23:30:00”,其中蕴含的信息并不足以进行时区转换,因为无法获知这是中国的23点30,还是美国的23点30,更不用说复杂的夏令时问题了。
我们可以使用一个long类型的变量来记录时间,该变量的值等于从1970年1月1日 00:00:00 GMT到记录时间点以来的毫秒数,其中GMT代表格林威治标准时间,通过这个差值,可以获得记录时间点的格林威治(零时区)时间,进而能方便的转换成全世界各时区的时间。(很多数据库引擎就是如此处理时间类型数据)
在Java中,有两个常用方法来获取以上描述的值:
System.currentTimeMillis(),该方法的返回值是从1970年1月1日 00:00:00 GMT至当前时间点以来的毫秒数,通常被用来获取当前系统时间;
java.util.Date的getTime(),该方法的返回值是从1970年1月1日 00:00:00 GMT至Date对象所表示的时间点以来的毫秒数,通常被用来获取特定的时间。
此外,我们还需要借助java.util.TimeZone类,来获取特定的时区,JRE安装目录下的\lib\zi文件夹列出了所有TimeZoneID,如:Asia/Shanghai。最后,使用java.text.SimpleDateFormat类提供的方法进行转换,并格式化输出。
//1. 将系统当前时间转换成美国东部时间
// America/Los_Angeles 洛杉矶时间
TimeZone timeZoneNY = TimeZone.getTimeZone("America/New_York");
SimpleDateFormat outputFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss Z yyyy", Locale.US);
outputFormat.setTimeZone(timeZoneNY);
Date date = new Date(System.currentTimeMillis());
System.out.println(outputFormat.format(date));
//2. 将一个以字符串形式输入的北京时间转换成美国东部时间
String inputDate = "2011-05-14 23:30:00";
TimeZone timeZoneSH = TimeZone.getTimeZone("Asia/Shanghai");
TimeZone timeZoneNY = TimeZone.getTimeZone("America/New_York");
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
inputFormat.setTimeZone(timeZoneSH);
Date date = null;
try
{
date = inputFormat.parse(inputDate);
}
catch (ParseException e)
{
}
SimpleDateFormat outputFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss Z yyyy", Locale.US);
outputFormat.setTimeZone(timeZoneSH);
System.out.println("Asia/Shanghai:" + outputFormat.format(date));
outputFormat.setTimeZone(timeZoneNY);
System.out.println("America/New_York:" + outputFormat.format(date));
那么,夏令时(DST)的问题怎么解决呢?令人高兴的是,JDK(or JRE)已自动为我们进行了夏令时处理。可以做个试验,来验证以上第2段代码能适用于夏令时转换。美国在2011年开始和结束夏令时的时间是:3.13 2AM和11.6 2AM。
将输入时间inputDate设置为"2011-03-13 14:59:59",输出: Asia/Shanghai:Sun Mar 13 14:59:59 +0800 2011 America/New_York:Sun Mar 13 01:59:59 -0500 2011 此时,美国东部时间还差1秒进入夏令时,与北京时间相差13小时。
将输入时间inputDate设置为"2011-03-13 15:00:00",输出: Asia/Shanghai:Sun Mar 13 15:00:00 +0800 2011 America/New_York:Sun Mar 13 03:00:00 -0400 2011 此时,美国东部时间刚好进入夏令时,与北京时间相差12小时,同时,所使用的时区也发生了变化。
结束夏令时的试验就不再赘述了。
JDK(or JRE)之所以能自动的进行DST处理,是因为其已内置了各个国家的夏令时政策,并提供Timezone Updater Tool来保持低版本JDK(or JRE)的TimeZone更新,但SUN官方推荐使用JDK(or JRE)的更新来更新TimeZone信息。
综上,我们应尽量在系统中使用如上描述的long类型变量来记录时间,借助相应的方法,可方便的格式化为不同时区的时间进行显示。
Java中输出时区的缩写_Java中的时区转换小结相关推荐
- java中输出时 什么作用_JAVA中输入和输出处理(Java I/O)重点总结
文件-使用File类操作文件: 什么是文件? 文件可认为是相关记录或放在一起的数据的集合. 文件一般存储在哪里? 储存在存储设备里. Java程序如何访问文件? Java API:java.io ...
- java怎样将日期本土化_Java中的日期操作
在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...
- java斐波那切数列_Java中的递归方法
递归算法 1.递归算法 递归在计算机科学中也称为递归算法.一些问题在分解的时候会有这样的现象:解决该问题的过程是由重复的相似子过程组成,类似这样的问题我们都可以通过递归算法进行解决.在计算机语言中,递 ...
- java中的方法在哪里_Java中的本机方法是什么,应在哪里使用?
小编典典 Java中的本机方法是什么,应在哪里使用? 一旦看到一个小例子,就很清楚了: Main.java : public class Main { public native int intMet ...
- java中String类是什么_Java中字符串的学习(一)String类的概述及常见方法使用
转载请注明出处http://www.cnblogs.com/devtrees/p/4347079.html (拓展:Api:编程语言对外给我们提供的应用程序接口.) 一.概述: 我们平时上网发帖,帖子 ...
- java中的this的用法_java中this的用法
This,英语单词,发音:[英][ðɪs][美][ðɪs].常翻译为:这,这么.java中this的用法有哪些呢?本文是学习啦小编整理java中this的用法的资料,仅供参考. java中this的用 ...
- java io和nio的区别_Java中IO和NIO的本质和区别
导读热词 简介 终于要写到java中最最让人激动的部分了IO和NIO.IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1 ...
- java的对象是什么意思_Java中对象和对象引用的区别,引用、指向是什么意思
Java的变量分为两大类:基本数据类型和引用数据类型. 其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量 ...
- java中的main的介绍_Java中的main函数详细讲解
第二.可以在另一个类中向包含main()的类传递参数,如下例: public class A { public static void main(String[] args) { for(int i= ...
最新文章
- 如何使用Cisco命令阻止访问特定网站
- boost::gil::scale_lanczos用法的测试程序
- redis源码剖析(八)—— 当你启动Redis的时候,Redis做了什么
- Update your Twitter status using php
- 知道python_看完这篇文章,你就知道Python是什么?
- python代码解读器_python文章生成器(附源码+讲解)
- 07、基于ADC0808/ADC0809的多通道电压采集程序设计
- MySQL-存储过程-高效清理数据
- Hadoop大数据技术课程总结2021-2022学年第1学期
- Iterative Reweighted Least Squares(IRLS)
- 软考:计划评审技术(PERT)三点估算法计算工期、标准差、完成概率
- 基于4组DDR KU115的PCIe 光纤加速计算卡419 光纤PCIe卡
- 0pyqt获取textEdit控件的文本
- java(基础)_输入
- 子类内部调用父类成员函数,及子类对象在外部调用父类成员函数问题(C++)
- 【Devops实践】Git+Gitlab+Jenkins pipeline(maven+Sonarqube+harbor) +k8s 整合CICD
- 借势“双碳”目标东风,重塑股份全力推动氢燃料电池多场景应用
- PVCBOT【21号】挑战者--人形机甲战士
- IBM Thinkpad 自带软件详解
- CleanMyMac X 4.13.4不仅是Mac清理工具,也是一款专业的Mac杀毒软件
热门文章
- android音乐播放器开发 SweetMusicPlayer 实现思路
- C6657核心板资料:基于TI DSP TMS320C6657、XC7K325T的高速数据处理核心板 375
- 第13期 《由量变到质变的过程》3月刊
- HDU 2549 壮志难酬 (水题,但有个小坑!)
- python制作简单网页_Python制作简单的网页爬虫
- 刘亦菲新剧开播,再演古装剧,是否能超越仙剑剧?
- Apple Mac OS 0.97太酷了。。。呵呵,顺便分享某版本Mac源码
- Bochs源码分析 - 11:《X86探索及编程》代码初步解释
- SIMD 单指令,多数据
- node.js测试html tdd,nodejs的单元测试框架mocha