当前位置:首页 > 开发 > 编程语言 > Java > 正文

关于Java时区的详解

发表于: 2015-01-21   作者:bobolnear   来源:转载   浏览次数:
摘要: 一. 基本概念 时区 :time zone 1884年国际经线会议规定,全球按经度分为24个时区,每区各占经度15°。 以本初子午线为中央经线的时区为零时区,由零时区向东、西各分12区,东、西12区都是半时区,共同使用180°经线的地方时。 CST :China Standard Time UTC+8:00 中国标准时间(北京时间),在东八区 UTC :Universal
一. 基本概念
时区 :time zone 1884年国际经线会议规定,全球按经度分为24个时区,每区各占经度15°。
以本初子午线为中央经线的时区为零时区,由零时区向东、西各分12区,东、西12区都是半时区,共同使用180°经线的地方时。
CST :China Standard Time UTC+8:00 中国标准时间(北京时间),在东八区
UTC :Universal Time Coordinated,世界协调时间,又称世界标准时间、世界统一时间。UTC 提供了一种与时区无关(或非特定于时区)的时间。
世界上的所有时区都可以表示为 UTC 加上或减去一个偏移量。
因此,UTC是0时区的时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时
GMT :Greenwich Mean Time格林威治标准时间,指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
Unix timestamp :Unix时间戳,或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,
定义为从格林威治时间(UTC/GMT的午夜)1970年01月01日00时00分00秒起至现在的总秒数。
可以这么说:
UTC和GMT几乎是同一概念,两者的区别是GMT是一个天文上的概念,UTC是基于原子钟。
GMT=UTC
GMT + 8 = UTC + 8 = CST
UTC+时间差=本地时间 (时间差东为正,西为负,东八区记为 +0800)
/**
	*@Author Rambo
	*@Desc:通过毫秒获取Calendar
	*@param millis
	*@return TODO
	*@Version  DateUtils.java,v 1.1 2015-1-21 上午11:22:54 
	*/
	public static Calendar getCalendar(long millis) {
		Calendar cal = Calendar.getInstance();
		cal.setTimeInMillis(millis);
		return cal;
	}

	/**
	*@Author Rambo
	*@Desc:通过日期获取Calendar
	*@param date
	*@return TODO
	*@Version  DateUtils.java,v 1.1 2015-1-21 上午11:23:07 
	*/
	public static Calendar getCalendar(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal;
	}
public static Date convertStringToDate(String strDate, String pattern) {
		if (StringUtils.isStringEmpty(strDate))
			return null;
		if (StringUtils.isStringEmpty(pattern))
			pattern = PATTERN_DATETIME;
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		try {
			return df.parse(strDate);
		} catch (ParseException e) {
			logger.error(strDate + "转化成" + pattern + "出现异常!");
			return null;
		}
	}
public static void main(String[] args) {
		Date local1970 = DateUtils.convertStringToDate("1970-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss");
		System.out.println("当前时区的格林尼治时间的毫秒数:"+local1970.getTime());
//		TimeZone timeBJ = TimeZone.getTimeZone("PRC");//得到北京时间的时区
		TimeZone timeBJ = TimeZone.getTimeZone("GMT+8");//得到北京时间的时区	
		String[] strs = timeBJ.getAvailableIDs();
		for (int i = 0; i < strs.length; i++) {
			System.out.println("东八区ID:"+strs[i]);
		}
		System.out.println(timeBJ.getOffset(local1970.getTime()));
		//所以如果要获取当地正确的时间
		TimeZone timeLocal = TimeZone.getTimeZone(getCalendar(local1970).getTimeZone().getID());//得到当前时间的时区	
		long timeZoneMi= timeLocal.getOffset(local1970.getTime());//当前时间要扣减的毫秒数
		long date1970 = local1970.getTime() + timeZoneMi;
		System.out.println("1970年格林威治时间的毫秒数:"+date1970);
	}

关于Java时区的详解

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
问题症状:使用了CrystalQuartz,但是配置的Cron规则没有按需求的执行 解决误区:试图修改源代码,
//日期输出格式 String targetFormat = "yyyy-MM-dd HH:mm:ss"; //日期原始格式 String origFormat
//日期输出格式 String targetFormat = "yyyy-MM-dd HH:mm:ss"; //日期原始格式 String origFormat
【转】关于JS对屏幕的计算详解 在一次工作中,遇到一菜单对屏幕的高度进行移动.在各浏览器下屏幕的计
IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库
什么是JDBC? Java语言访问数据库的一种规范,是一套API JDBC (Java Database Connectivity) API,即Ja
1 串口通信简介 嵌入式系统或传感器网络的很多应用和测试都需要通过PC机与嵌入式设备或传感器节点进
<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we v
<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we v
<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we v
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号