美国时间转中国时间,兼容夏令时
来源:互联网 发布:js 拖动 编辑:程序博客网 时间:2024/06/02 11:58
/**
* 美国时间转中国时间
* @param date
* @param oldZone
* @param newZone
* @return
*/
public static Date changeTimeZone(Date date, TimeZone oldZone, TimeZone newZone) {
//转换为当时的美国时值
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(oldZone);
date = strToDate(simpleDateFormat.format(date));
//转换为当时的中国时区的值
simpleDateFormat.setTimeZone(newZone);
date = strToDate(simpleDateFormat.format(date));
return date;
}
public static Date strToDate(String str){
Calendar calendar = Calendar.getInstance();
int year = Integer.parseInt(str.substring(0, 4));
int month = Integer.parseInt(str.substring(5, 7));
int day = Integer.parseInt(str.substring(8, 10));
int hour = Integer.parseInt(str.substring(11, 13));
int minute = Integer.parseInt(str.substring(14, 16));
int second = Integer.parseInt(str.substring(17, 19));
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month-1);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
return calendar.getTime();
}
关键原理:
时间和日历是两个不同的概念。
Date代表的是一个绝对时间,也就是说,不管你在哪个时区,Date都是一样的,都是从1970年1月1日0点0分GMT时间起,到目前这一刻的毫秒数。所以,你第一段代码和第二段代码里面,得到的date对象所代表的时间其实是一样的。
而日历是人们对绝对时间的一种描述方法,例如某年某月某日几时几分几秒,这,随着你当前所处的时区和地区而不同。
你在观察date对象的时候,你肯定没有去看它的毫秒数,而是先把毫秒数转换成一个日历。你没有写出你是怎么把date转换成日历的,但假如你是用默认的Date.toString()的话,那么,这是根据当前的默认时区来把毫秒数转换成日历的。因此,你在第一段代码里没有修改默认时区,得到的还是美国时间。而在第二段代码里,因为修改了默认时区,所以虽然绝对时间没有变化,但是你转换得到的日历不一样了。
其实,如果你是要获取当前时间,那么直接用new Date()就可以了,跟你先创建一个Calendar对象,再指定一个时区后获取的date是完全一样的。只有在你需要把一个date用日历来表示的时候,才需要用到Calendar和TimeZone。
一些总结:
calendar.setTimeZone():你在calendar对象里面set的日期(日历)是对于哪个时区来说的
calendar.getTime():你说说的这个日期(日历),从1970(标准时区的这个日期)到现在过了多少秒
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
simpleDateFormat.format(date):按照时区,来对时间戳进行日期(日历)格式化
0 0
- 美国时间转中国时间,兼容夏令时
- 夏令时 游戏时间逻辑处理
- AIX 时间问题(夏令时)
- android 时间处理(夏令时)
- UNIX时间和夏令时计算
- 获取中国标准时间(由美国官方时间折算)
- 什么是GMT、UTC、PDT及夏令时时间?
- Java中的时间、时区和夏令时
- UTC时间,GMT时间与夏令时冬令时详解
- 时区、时间、夏令时及NTP时间同步设置
- 细节备忘——时间戳和夏令时
- javascript来判断某个时间是不是处于夏令时
- javascript来判断某个时间是不是处于夏令时
- 时间标准总结 IAT、UT、UTC、GMT、夏令时
- js获得当前时区夏令时发生和终止的时间
- 夏令时【Daylight Saving Time】时间计算出错的解决办法
- 日期与时间函数与夏令时的关系
- 冬令时和夏令时及国外时间处理
- linux从文件中取出指定行指定列的数据并赋给变量
- UILabel如果让字体自适应
- 下一个倒下的会不会是三星?
- 安卓 Cordova混合开发 添加插件篇
- test
- 美国时间转中国时间,兼容夏令时
- 【VK Cup 2016 - Round 1 (Div 2 Edition)C Bear and Forgotten Tree 3 (构造)
- 轮播
- Disks--计算几何
- Lynx使用指南
- Eclipse 远程调试 WebSphere Application Server (WAS)
- Spring Boot入门===Hello World
- jquery eval解析JSON中的注意点介绍
- 在java的Map集合中,怎样更改value的值