`
desert3
  • 浏览: 2140036 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

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

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

基于Java6文档
java.util.Calendar:是一个抽象类,用来对特定的时间点在YEAR, MONTH, DAY_OF_MONTH, HOUR等纬度进行转换和操作(加、减等)。注意是Calendar是受TimeZone时区和Locale区域影响的。
Calendar中包含的不同纬度:
  • 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——星期几

默认的无参方法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会出异常。

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

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

构造函数:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
由构造函数可以看出,一个Locale最多有3部分构成,每部分之间用下划线分隔,如zh_TW,ja_JP。具体参数如下:
language语言代码 是一个ISO Language Code, 根据ISO-639定义由2个小写字母构成 其中定义汉语Chinese的代码为zh 英语English的代码为en 日语Japanese的代码ja
country国家代码 是一个ISO Country Code, 根据ISO 3166 Codes (Countries)定义由2个大写字母构成 其中定义中国China的代码为CN 美国的代码US 日本的代码JP
variant变体是供应商或者浏览器特定的代码。如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

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

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

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

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

Date中设置或者返回年,月,日,时,分,秒的值:
  • 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; 值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。

java.sql.Date, java.sql.Time, java.sql.TimeStamp是java.util.Date类的子类。是给JDBC用来表示SQL DATE, SQL TIME和 SQL TIMESTAMP数据库字段。为了符合SQL对于自己数据类型的要求,上述3个Date子类都做了一定的限制。
java.sql.Date对一个毫秒值进行了简单的包装(毫秒值计算是从GMT时间 1970年1月1号0时0分0秒开始的),用来给JDBC表示一个SQL DATE的值。根据SQL DATE的规定,java.sql.Date对应实例的时分秒要等于0.
java.sql.Time对java.util.Date进行了简单的包装,用来给JDBC表示一个SQL TIME的值。这个字段的日期部分的值固定为January 1, 1970并且不可修改

疑问:
getTimeInMillis的时间偏移量(因为基准是1970年1月1号 GMT标准时间)
Calendar的getTimeInMillis的毫秒数,是否已经把历史上的毫秒数统计进去?使用格里高日历,应该没有包含。
分享到:
评论

相关推荐

    欺骗时区「Spoof Timezone」-crx插件

    此扩展名将浏览器时区更改为随机或用户定义的值。 此扩展欺骗了JavaScript提供给网页的当前时区。您可以在选项页面中指定首选时区,并且附加组件可确保您的真实时区受到保护(网站不可见)。还有一个选项可以要求...

    C语言头文件 LOCALE.H

    C语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE.HC语言头文件 LOCALE....

    ResourceBundle

    ResourceBundle Editor (eclipse-rbe)是一个用于编辑本地化的属性文件(localized properties files)。它让你通一个屏幕就能够同时管理所有相关联属性文件中的key/value信息。它所具有的功能包括:自动为Keys分类,...

    utc2locale:从 Date#toUTCString() 到 Date#toLocaleString() 的流式方法

    utc2locale 从 Date#toUTCString() 到 Date#toLocaleString() 的流式方法。安装 $ npm install -g utc2locale用法正确运行 $ tail -f /path/to/your/log | utc2locale或者 $ utc2locale </path/to/your/log与 ...

    Apps.Locale.resources.dll

    Apps.Locale.resources.dll

    locale-archive 和 locale-archive.tmpl

    locale-archive 和 locale-archive.tmpl 里面保存了这两个文件。这个是位于Linux系统 /usr/lib/locale 文件夹下的。 里面保存了比较全的字符集。

    Locale详解

    Locale详解Locale详解Locale详解Locale详解

    Locale

    java.util.Locale

    java时间格式大全(算法源码)

    date1.setTime(Time * 1000); mydate1 = format.format(date1); } catch (Exception e) { } return mydate1; } /** * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数 */ public ...

    timezones:一个简单的时区数据集,其中包含国家_地区,国家_地区代码,UTCOffset和时区

    timeZones和UTCOffset数组与时区及其对应的UTCOffset匹配。 尽管有些国家/地区像这样一个时区: { countryCode: "CL", countryName: "Chile", timeZones: [ "America/Punta_Arenas", "America/Santiago", ...

    Laravel开发-locale

    Laravel开发-locale Laravel 5本地化包

    Locale.Emulator.2.4.0.0

    官网搬的Locale.Emulator,地址http://pooi.moe/Locale-Emulator/,GIT地址https://github.com/xupefei/Locale-Emulator非常简洁好用的转区工具希望大家能关注一下

    java常用工具类的使用

    而Date的其他构造方法和普通方法的API都不容易实现国际化,因此目前Date类的大多数方法都被标识为过时,表示更灵活的时间类请参考java.util.Calendar。 Date的输出结果是按照国际通用格式输出的,而中国更习惯于...

    linux中locale自用总结

    linux中locale自用总结 locale是根据计算机用户所使用的语言、所在国家或者地区、以及当地的文化传统所定义的一个软件运行时的语言环境。

    测试locale的java代码

    这是一个可运行的小例子,测试locale的java代码

    Swift 的 Date、DateFormatter、DateComponents、Locale 之间的关系说明

    Swift 的 Date、DateFormatter、DateComponents、Locale 之间的关系说明 前言 理解这些类之间的关系,和这些类是干嘛的,对处理时间来说很重要 类名 说明 注意 Date 只是表示时间的一个数据,只表示时间节点...

    Laravel开发-laravel-locale

    Laravel开发-laravel-locale Laravel 5强大的本地化功能

    Locale Emulator 2.2.1.0

    Locale Emulator 可以提供类似 NTLEA 和 AppLocale 的转区功能,为访问github不便的人上传至csdn。访问github无碍的请戳 https://github.com/xupefei/Locale-Emulator/releases,

    C语言头文件 XLOCALE

    C语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言头文件 XLOCALEC语言...

Global site tag (gtag.js) - Google Analytics