Java中的时间和时区
2013-09-29 19:12
232 查看
关于时区的划分参见维基百科:http://zh.wikipedia.org/wiki/%E6%99%82%E5%8D%80
Java中关于时间的类有两个关键的类:
java.util.Calendar;
java.util.Date;
今天在使用PostgreSQL数据库的时候,关于时间类型提供了一个timestamp with time zone,结果没注意,写入数据库的时间在页面上显示没能达到希望,问题出在该类型下的时间格式使用UTC来描述,这样要正确显示本地特征的日期就要做额外的处理。
写了几个测试,附带说明一下Java中的时间和时区
1.获取本地默认时区
4.关于年和毫秒数
Date实例获取的year是当前年份与1900之差。
Date实例的getTime()返回当前时间距离:1970-01-01 00:00:00毫秒数。
历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)和1900年1月1日的00:00:00.000两个时间点是Java开发中时间日期的重要参考量。
5.UTC时间
附一张时区图:
本文出自 “野马红尘” 博客,谢绝转载!
Java中关于时间的类有两个关键的类:
java.util.Calendar;
java.util.Date;
今天在使用PostgreSQL数据库的时候,关于时间类型提供了一个timestamp with time zone,结果没注意,写入数据库的时间在页面上显示没能达到希望,问题出在该类型下的时间格式使用UTC来描述,这样要正确显示本地特征的日期就要做额外的处理。
写了几个测试,附带说明一下Java中的时间和时区
1.获取本地默认时区
@Test public void test1() { System.out.println("TimeZone.getDefault():" + TimeZone.getDefault()); }默认时区内容:
TimeZone.getDefault():sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]2.支持的时区信息
@Test public void test3() { String[] ids = TimeZone.getAvailableIDs(); System.out.println("TimeZone AvailableIDs Numbers :" + ids.length); for (String id : ids) { System.out.println("TimeZone:Id-" + id); } }部分结果:
TimeZone AvailableIDs Numbers :619 TimeZone:Id-Etc/GMT+12 TimeZone:Id-Etc/GMT+11 TimeZone:Id-Pacific/Midway TimeZone:Id-Pacific/Niue TimeZone:Id-Pacific/Pago_Pago TimeZone:Id-Pacific/Samoa TimeZone:Id-US/Samoa TimeZone:Id-America/Adak TimeZone:Id-America/Atka TimeZone:Id-Etc/GMT+10 TimeZone:Id-HST TimeZone:Id-Pacific/Honolulu TimeZone:Id-Pacific/Johnston TimeZone:Id-Pacific/Rarotonga TimeZone:Id-Pacific/Tahiti TimeZone:Id-SystemV/HST10 TimeZone:Id-US/Aleutian TimeZone:Id-US/Hawaii3.GMT时间和本地时间显示
@Test public void test2() { Date d = new Date(); System.out.println("Date.toGMTString():" + d.toGMTString()); System.out.println("Date.toLocaleString():" + d.toLocaleString()); }结果:
Date.toGMTString():29 Sep 2013 10:25:37 GMT Date.toLocaleString():2013-9-29 18:25:374. 下面是Date对象的时间方法和Calendar对象方法对比
public void test4() { Date d = new Date(); System.out.println("java.util.Date:"); System.out.println("Date.getYear():" + d.getYear()); System.out.println("Date.getMonth():" + d.getMonth()); System.out.println("Date.getDay():" + d.getDay()); System.out.println("Date.getHours():" + d.getHours()); System.out.println("Date.getMinutes():" + d.getMinutes()); System.out.println("Date.getSeconds():" + d.getSeconds()); } public void test10() { /** * JDK1.1后:抛弃Date类,使用Calendar类 */ Calendar c = Calendar.getInstance(); System.out.println("YEAR:" + (c.get(Calendar.YEAR))); System.out.println("MONTH:" + ((c.get(Calendar.MONTH)) + 1)); System.out.println("DAY_OF_MONTH:" + (c.get(Calendar.DAY_OF_MONTH))); System.out.println("HOUR_OF_DAY:" + (c.get(Calendar.HOUR_OF_DAY))); System.out.println("MINUTE:" + (c.get(Calendar.MINUTE))); System.out.println("SECOND:" + (c.get(Calendar.SECOND))); System.out.println("DAY_OF_WEEK:" + (c.get(Calendar.DAY_OF_WEEK))); System.out.println("DAY_OF_WEEK_IN_MONTH:" + (c.get(Calendar.DAY_OF_WEEK_IN_MONTH))); System.out.println("DAY_OF_YEAR:" + (c.get(Calendar.DAY_OF_YEAR))); }结果:
Date类: 结果 java.util.Date: Date.getYear():113 Date.getMonth():8 Date.getDay():0 Date.getHours():18 Date.getMinutes():25 Date.getSeconds():37 Calendar类: 结果 YEAR:2013 MONTH:9 DAY_OF_MONTH:29 HOUR_OF_DAY:18 MINUTE:25 SECOND:37 DAY_OF_WEEK:1 DAY_OF_WEEK_IN_MONTH:5 DAY_OF_YEAR:272Date类的大多数方法已经弃用,建议使用Calendar类,Calendar提供了功能更加完整,强大的时间处理方法和属性。
4.关于年和毫秒数
Date实例获取的year是当前年份与1900之差。
Date实例的getTime()返回当前时间距离:1970-01-01 00:00:00毫秒数。
历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)和1900年1月1日的00:00:00.000两个时间点是Java开发中时间日期的重要参考量。
5.UTC时间
@Test public void test5() { long times = Date.UTC(2, 2, 1, 1, 1, 59); System.out.println("Date.UTC(2, 2, 1, 1, 1, 59):" + times); times = Date.UTC(113, 2, 1, 1, 1, 59); System.out.println("Date.UTC(113, 2, 1, 1, 1, 59):" + times); }结果:
Date.UTC(2, 2, 1, 1, 1, 59):-2140815481000 Date.UTC(113, 2, 1, 1, 1, 59):1362099719000这里的时间参考点就是:1970 年 1 月 1 日的 00:00:00.000
附一张时区图:
本文出自 “野马红尘” 博客,谢绝转载!
相关文章推荐
- Java 改变服务器时区为特定时区(解决获取系统时间和服务器相差8个小时)
- JAVA获取某个时区的时间
- java windows server 2003 时区导致取时间错误
- solr和java时区时间日期转化方法
- java8 日期 时间 时区
- java 时间纪元与时区介绍
- java 根据时区算出这个时区的时间
- 带时区的时间MySQL以及java中的处理
- java时区——获得某一时区的某一时刻一天的开始结束时间
- java_时区与时间问题总结
- Java中的时间与时区
- Java中的时间、时区和夏令时
- JAVA学习17_Java时区转换及时间格式
- java获取当前时区的时间
- 用Java取指定时区的时间 北京时间,纽约时间,班加罗尔时间
- Java 获取各时区时间,获取当前时间到格林威治时间1970年01月01日00时00分00秒的秒数
- 用Java取指定时区的时间 北京时间,纽约时间,班加罗尔时间
- java时间转化会由于时区问题会…
- java导入excel表格时间类型转换格林时间制时区问题
- java获取不同时区的时间字符串