关于Java时区的详解_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 关于Java时区的详解

关于Java时区的详解

 2015/1/21 12:49:53  bobolnear  程序员俱乐部  我要评论(0)
  • 摘要:一.基本概念时区:timezone1884年国际经线会议规定,全球按经度分为24个时区,每区各占经度15°。以本初子午线为中央经线的时区为零时区,由零时区向东、西各分12区,东、西12区都是半时区,共同使用180°经线的地方时。CST:ChinaStandardTimeUTC+8:00中国标准时间(北京时间),在东八区UTC:UniversalTimeCoordinated,世界协调时间,又称世界标准时间、世界统一时间。UTC提供了一种与时区无关(或非特定于时区)的时间
  • 标签:详解 Java
一. 基本概念
时区 :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)
class="java">
/**
	*@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);
	}

  • 大小: 457.1 KB
  • 查看图片附件
发表评论
用户名: 匿名