Calendar & Date & TimeZone & Locale & ResourceBundle UTC GMT CST WST 闰年闰秒

Greenwich ['ɡri:nidʒ] n. 格林尼治(英国伦敦东南一市镇, 从前皇家天文台的所在地; 通过该天文台的经线被定为本初子午线)
GMT [,dʒi: em 'ti:] abbr. 格林尼治标准时间(Greenwich Mean Time)
UTC Universal Time Coordinated世界调整时间[b](UTC使用原子钟,在百万年内几乎都能保持恒速,但是由于地球自转速度变慢,使用leap second来调整原子钟的时间来适应地球自转速度。从1972年开始,截至到今天2012年4月13号,总共有24个闰秒存在,下个闰秒在2012年6月被加进来。)[/b]
UTC Universal time code国际标准时间码
CST=China Standard Time 中国标准时间
WST=World Standard Time 世界标准时间(新的WST是UTC时间)
Leap year闰年:是为了弥补因人为历法规定([b]JSE中默认使用GregorianCalendar格里高日历,有闰年,没有闰秒[/b])造成的年度天数与地球实际公转周期的时间差而设立的。通常的解释都是说一年有多少天多少小时多少分,取整数365还有多余的,累积达到一天24小时后,就多加一天的年是闰年。补上时间差的年份为闰年。闰年共有366天,2月份有29天。闰年定义:四年一闰,百年不闰,四百年再闰。
[b]不同的日历对于这多出来的一天处理方式不同,闰年计算方式也不同。比如格里高日历中有润日,农历中有闰月![/b]格里高日历闰年规则:被4整除,世纪初的年份被400整除的是闰年。(1900不是,2000是闰年);而Julian日历规定被4整除就是闰年。
Daylight Saving Time:DST是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。[b]对于上下班时间有影响。[/b]

[b]基于Java6文档[/b]
[b]java.util.Calendar[/b]:是一个抽象类,用来对特定的时间点在YEAR, MONTH, DAY_OF_MONTH, HOUR等纬度进行[color=red]转换和操作(加、减等)[/color]。注意是[color=red]Calendar是受TimeZone时区和Locale区域[/color]影响的。
Calendar中包含的不同纬度:
[list]
[*]Calendar.YEAR——年份
[*]Calendar.MONTH——月份
[*]Calendar.DATE——日期
[*]Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同
[*]Calendar.HOUR——12小时制的小时数
[*]Calendar.HOUR_OF_DAY——24小时制的小时数
[*]Calendar.MINUTE——分钟
[*]Calendar.SECOND——秒
[*]Calendar.DAY_OF_WEEK——星期几
[/list]
默认的无参方法getInstance是根据当前JVM所在机器的TimeZone和Locale并取得当前机器时间。(getInstance Gets a calendar using the default time zone and locale. The Calendar returned is based on the current time in the default time zone with the default locale.)
Calendar的属性lenient:lenient模式下(Calendar默认lenient=true),32 January 2006是允许存在的。非lenient模式下,32 January 2006会出异常。

[b]java.util.TimeZone[/b]:[color=red]表示相对于GMT格林尼治时区的偏移量,和locale没有关系,TimeZone类的实例中可以直接得到offset偏移量的值[/color]。getDefault方法可以取得默认的时区,
getAvailableIDs()可以取得所有可用的时区,
getTimeZone("GMT"), getTimeZone("Asia/Shanghai")可以取得特定的时区。
如果需要的时区不存在,也可以根据规则自定义时区。

[b]java.util.Locale[/b]:表示一个地理上,政治上或者文化上的特定区域。一个操作如果需要Locale 来执行任务,那么这个操作就是locale-sensitive区域敏感的。譬如显示一个日期、数字就是locale-sensitive的操作---需要根据用户的的国家,区域或者文化的规定或者习惯来格式化显示。

构造函数:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
由构造函数可以看出,[color=red]一个Locale最多有3部分构成,每部分之间用下划线分隔,如zh_TW,ja_JP。[/color]具体参数如下:
[b]language语言代码[/b] 是一个ISO Language Code, 根据[url=http://www.loc.gov/standards/iso639-2/php/English_list.php]ISO-639[/url]定义由2个小写字母构成 其中定义汉语Chinese的代码为zh 英语English的代码为en 日语Japanese的代码ja
[b]country国家代码[/b] 是一个ISO Country Code, 根据[url=http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html]ISO 3166 Codes (Countries)[/url]定义由2个大写字母构成 其中定义中国China的代码为CN 美国的代码US 日本的代码JP
[b]variant变体[/b]是供应商或者浏览器特定的代码。如WIN for Windows, MAC for Macintosh, and POSIX for POSIX。多部分变体之间也用下划线分隔。

Locale中定义了很多常用的变量方便用户使用如Locale.US(en_US), Locale.CHINA(zh_CN) , Locale.JAPAN(ja_JP)等。
Locale敏感的类例子:NumberFormat

[b]java.util.ResourceBundle[/b]:包含一个特定locale的对象,用来做国际化:根据指定用户的locale取得相应locale的资源。[color=red]Resource bundles资源镞的名字是由1个基本名字和用来标识locale的额外名字构成。[/color]如基本名字是MyResources,MyResources_de,MyResources_zh_CN等
调用特定对象的资源文件:
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);

[b]java.util.Date[/b]:表示[color=red]一个特定的时间点,有毫秒的精度[/color]。无参构造函数生成时,使用的是JVM所在的机器的时间,并且是最接近的毫秒。它[color=red]没有TimeZone时区和Locale区域[/color]的设置。同时对于对日期进行加、减、今天是周几等操作时,一般使推荐用Calendar。
在 JDK 1.1 之前,类 Date 有两个主要功能。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和分析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串。Date 中的相应方法已废弃。

在[b]UTC(Universal Time Coordinated)世界调整时间[/b]中,每过1,2年就会有额外的一秒(地球自转速度变化导致的),称为[color=red]leap second “闰秒”[/color],闰秒总是被加在一天中的最后一秒,并且总是加在12月31号或者6月30号。例如:1995年的最后一分钟就是有61秒。[b]而几乎所有的现在操作系统都假设1天 = 24 × 60 × 60 = 86400秒。因此由于闰秒的存在,大部分电脑都不能精确地反应出这一秒。这也是为什么电脑需要做周期性的时间同步的原因。[/b][color=red]Date类并没有反应出UTC中的闰秒,它直接从操作系统取得时间。[/color][color=green]Calendar也是应该从操作系统取得时间[/color]。也就是说JVM在电脑上使用的Date和Calendar的毫秒数中都不包含leap second。

有些电脑采用GMT(Greenwich mean time) 格林尼治时间(等同于UT世界时间),GMT是生活中的叫法,UT是科学上的叫法。UTC是根据原子钟,UT是根据天文观测。

Date中设置或者返回年,月,日,时,分,秒的值:
[list]
[*]A year y is represented by the integer y - 1900.
[*]A month is represented by an integer from 0 to 11; 0 is January, 1 is February, and so forth; thus 11 is December.
[*]A date (day of month) is represented by an integer from 1 to 31 in the usual manner.
[*]An hour is represented by an integer from 0 to 23. Thus, the hour from midnight to 1 a.m. is hour 0, and the hour from noon to 1 p.m. is hour 12.
[*]A minute is represented by an integer from 0 to 59 in the usual manner.
[*]A second is represented by an integer from 0 to 61; [b]值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。[/b]于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。
[/list]
[b]java.sql.Date, java.sql.Time, java.sql.TimeStamp[/b]是java.util.Date类的子类。[color=red]是给JDBC用来表示SQL DATE, SQL TIME和 SQL TIMESTAMP数据库字段。为了符合SQL对于自己数据类型的要求,上述3个Date子类都做了一定的限制。[/color]
[b]java.sql.Date[/b]对一个毫秒值进行了简单的包装(毫秒值计算是从GMT时间 1970年1月1号0时0分0秒开始的),用来给[b]JDBC[/b]表示一个SQL DATE的值。根据SQL DATE的规定,[b]java.sql.Date对应实例的时分秒要等于0.[/b]
[b]java.sql.Time[/b]对java.util.Date进行了简单的包装,用来给[b]JDBC[/b]表示一个SQL TIME的值。[b]这个字段的日期部分的值固定为January 1, 1970并且不可修改[/b]

[color=red]疑问:[/color]
getTimeInMillis的时间偏移量(因为基准是1970年1月1号 GMT标准时间)
Calendar的getTimeInMillis的毫秒数,是否已经把历史上的毫秒数统计进去?使用格里高日历,应该没有包含。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值