关于utc时间转换北京时间为当地时间的问题(夏令时)

Java获取UTC时间的方法详解
作者:番茄与西红柿
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Java获取UTC时间的方法,结合具体实例形式详细分析了Java针对时区、本地时间、时间偏移量等相关操作技巧,需要的朋友可以参考下
本文实例讲述了Java获取UTC时间的方法。分享给大家供大家参考,具体如下:
取得本地时间:
java.util.Calendar cal = java.util.Calendar.getInstance();
取得指定时区的时间:
java.util.TimeZone zone = java.util.TimeZone.getTimeZone(“GMT-8:00″);
java.util.Calendar cal = java.util.Calendar.getInstance(zone);
java.util.Calendar cal = java.util.Calendar.getInstance(java.util.Locale.CHINA);
您可以取得GMT 0的本地时间,但是又如何取得标准(相对于Java而言)的时间呢?
1. 取得本地时间:
java.util.Calendar cal = java.util.Calendar.getInstance();
2. 取得时间偏移量:
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
3. 取得夏令时差:
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
4.从本地时间里扣除这些差量,即可以取得UTC时间:
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
完整示例:
import java.text.DateF
import java.text.ParseE
import java.text.SimpleDateF
import java.util.C
import java.util.TimeZ
public final class GetUTCTimeUtil {
private static DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm") ;
* 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"&br /&
* 如果获取失败,返回null
public static String getUTCTimeStr() {
StringBuffer UTCTimeBuffer = new StringBuffer();
// 1、取得本地时间:
Calendar cal = Calendar.getInstance() ;
// 2、取得时间偏移量:
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
// 3、取得夏令时差:
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
UTCTimeBuffer.append(year).append("-").append(month).append("-").append(day) ;
UTCTimeBuffer.append(" ").append(hour).append(":").append(minute) ;
format.parse(UTCTimeBuffer.toString()) ;
return UTCTimeBuffer.toString() ;
}catch(ParseException e)
e.printStackTrace() ;
* 将UTC时间转换为东八区时间
* @param UTCTime
public static String getLocalTimeFromUTC(String UTCTime){
java.util.Date UTCDate =
String localTimeStr =
UTCDate = format.parse(UTCTime);
format.setTimeZone(TimeZone.getTimeZone("GMT-8")) ;
localTimeStr = format.format(UTCDate) ;
} catch (ParseException e) {
e.printStackTrace();
return localTimeS
public static void main(String[] args) {
String UTCTimeStr = getUTCTimeStr() ;
System.out.println(UTCTimeStr);
System.out.println(getLocalTimeFromUTC(UTCTimeStr));
运行结果如下:
PS:这里再为大家推荐几款时间及日期相关工具供大家参考使用:
在线日期/天数计算器:
在线日期计算器/相差天数计算器:
在线日期天数差计算器:
Unix时间戳(timestamp)转换工具:
在线世界各地时间查询:
希望本文所述对大家java程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
UTC时间与北京时间的差多久?比如说UTC时间1月21日中午12:00,北京时间是?
扫二维码下载作业帮
3亿+用户的选择
每个地区都有自己的本地时间,在网上以及无线电通信中时间转换的问题就显得格外突出.我自己就经常混淆于此,特地研究了一下,记录在此以备忘. 整个地球分为二十四时区,每个时区都有自己的本地时间.在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated).UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同.在本文中,UTC与GMT含义完全相同. 北京时区是东八区,领先UTC八个小时,在电子邮件信头的Date域记为+0800.如果在电子邮件的信头中有这么一行: Date: Fri, 08 Nov :22 +0800 说明信件的发送地的地方时间是二○○二年十一月八号,星期五,早上九点四十二分(二十二秒),这个地方的本地时领先UTC八个小时(+0800, 就是东八区时间).电子邮件信头的Date域使用二十四小时的时钟,而不使用AM和PM来标记上下午. 以这个电子邮件的发送时间为例,如果要把这个时间转化为UTC,可以使用一下公式: UTC + 时区差 = 本地时间 时区差东为正,西为负.在此,把东八区时区差记为 +0800, UTC + (+0800) = 本地(北京)时间 (1) 那么,UTC = 本地时间(北京时间))- 0800 (2) 0942 - 0800 = 0142 即UTC是当天凌晨一点四十二分二十二秒.如果结果是负数就意味着是UTC前一天,把这个负数加上2400就是UTC在前一天的时间.例如,本地(北京)时间是 0432 (凌晨四点三十二分),那么,UTC就是 0432 - 0800 = -0368,负号意味着是前一天, -0368 + 2400 = 2032,既前一天的晚上八点三十二分. 纽约的时区是西五区,比UTC落后五个小时,记为 -0500: UTC + (-0500) = 纽约时间 (3) UTC = 纽约时间 + 0500 (4) 把(2)式 - (4)式相比较, UTC = 北京时间 - 0800 = 纽约时间 + 0500 (5) 即 北京时间 = 纽约时间 + 1300 (6) 即北京时间领先纽约时间十三个小时,由(6)式, 纽约时间 = 北京时间 - 1300 (7) 在四月下旬,纽约又换用夏令时,又称为日光节约时,比标准纽约时间提前一个小时,实际成为西四区的标准时间,成为 -0400. UTC + (-0400) = 纽约夏令时,套用以上公式, 北京时间 = 纽约夏令时 + 1200 纽约夏令时 = 北京时间 - 1200 在这些转换中,最重要的公式就是 UTC + 时区差 = 本地时间 时区差东为正,西为负.例如,东八区(北京)是 +0800,西五区(纽约)是-0500,加州是西八区,是-0800,美国中部时区是西六区,-0600,美国山地时区是西七区,-0700,太平洋时区是西八区,-0800,在夏天使用夏时制,成为-0700.德国时区是东一区,+0100,夏天变为+0200. 多数电子邮件程序,例如Outlook Express,在显示时间时,计算机程序把时间先转换成为本地时间再显示,例如,邮件的Date域为: Date: Fri, 08 Nov :22 +0800 Outlook Express在显示时就显示为: Date: Thur, 07 Nov :22 pm,把北京时间转换成为了纽约时间,而且把二十四小时格式的时间转换成为了十二小时的格式.当然,为了时间转换正确,发送方和接受方的计算机的时区都要设置正确,在这里,发送方的时区要正确地设为北京时区东八区,而我的时区要设为西五区. 为了方便起见,我在这里放上纽约,加洲以及北京实时显示的时钟,以省去计算的麻烦.
为您推荐:
其他类似问题
扫描下载二维码}

我要回帖

更多关于 shell utc 夏令时 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信