`
desert3
  • 浏览: 2159301 次
  • 性别: 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的毫秒数,是否已经把历史上的毫秒数统计进去?使用格里高日历,应该没有包含。
分享到:
评论

相关推荐

    JAVA Calendar,Date类详解

    1. `getInstance()`:获取`Calendar`的实例,可以根据系统默认的locale和time zone创建。 2. `getTime()`:返回`Date`对象,代表当前`Calendar`实例的时间值。 3. `getTimeInMillis()`:返回自1970年1月1日00:00:00 ...

    Java中CST和GMT的区别及用法

    本文旨在深入探讨Java中的CST(Central Standard Time)和GMT(Greenwich Mean Time)之间的区别及其用法,并提供实际编程示例来帮助读者更好地掌握这两个概念。 #### 二、GMT(格林尼治标准时间) GMT,即格林尼治...

    Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat的区别于用法

    Java中的时区处理涉及到几个关键类:Date, Calendar, TimeZone, 和 SimpleDateFormat。这些类在处理时间日期时扮演着不同的角色。 1. **Date类**:Date对象代表的是一个时间点,精确到毫秒。它不包含任何时区信息,...

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

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

    Xml ResourceBundle简单实现

    Xml ResourceBundle是一种在Java编程语言中处理国际化(i18n)和本地化(l10n)资源的方式。它允许开发者以XML格式存储各种语言版本的文本字符串和其他资源,便于程序根据用户所在的区域或首选语言提供相应的内容。...

    安卓Android源码——Calendar.rar

    - Calendar类支持设置不同的时区(TimeZone)和语言环境(Locale),以适应全球化的应用需求。 - 设置时区可以通过setTimeZone(TimeZone timeZone),设置locale通过setLocale(Locale locale)。 8. **Calendar API...

    JavaCalendar_JAVA源码_

    通过`getTime()`方法,`Calendar`可以转换为`Date`,反之,通过`.setTime(Date date)`可以将`Date`赋值给`Calendar`。 在源码中,`Calendar`的实现可能包括对不同时间系统的处理,如公历、伊斯兰历等。它还可能涉及...

    locale-archive 和 locale-archive.tmpl

    在Linux操作系统中,`locale-archive`和`locale-archive.tmpl`是两个非常关键的文件,它们与系统的国际化(Internationalization,简称i18n)和本地化(Localization,简称l10n)设置密切相关。`locale`是系统用来...

    calendar

    - `time.time()`返回当前时间的时间戳,`time.localtime()`和`time.gmtime()`将时间戳转换为本地时间和UTC时间。 4. **时间格式化和解析**: - 使用`strftime()`方法可以将日期和时间对象格式化为字符串,如`...

    C语言头文件 LOCALE.H

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

    java Date 学习总结

    本文将对`java.util.Date`、`java.util.Calendar`以及`java.text.SimpleDateFormat`等类的使用进行详细总结,帮助读者更好地理解和掌握这些核心API。 #### 一、Calendar 的使用 ##### 1. 初始化 Calendar 实例 ``...

    android控件date_and_time应用示例

    本示例将深入探讨如何在Android应用程序中使用日期(Date)和时间(Time)控件,并提供实际应用的示例。我们将讨论以下几个核心知识点: 1. **DatePicker**: DatePicker是Android提供的用于选择日期的视图组件。它...

    ResourceBundle

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

    自定义的Calendar

    此外,你还需要考虑时区(`TimeZone`)的影响,因为不同的日历系统可能有不同的时区规则。 创建自定义`Calendar`的一个常见做法是使用`Locale`来区分不同的日历系统。例如,你可以为日本的日历创建一个`...

    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与 ...

    react-rccalendarReact日历组件

    RCCalendar提供了许多类名,如`.rc-calendar`, `.rc-calendar-date`, `.rc-calendar-selected`等,通过这些类名可以精准地调整样式。 ### 六、实际应用 在实际项目中,RCCalendar常用于以下场景: - **表单中的...

    calendar 日期JS 实现

    `calendar`和`js`标签暗示了我们将在JavaScript环境中讨论如何实现一个小型的日历功能。在本文中,我们将深入探讨JavaScript中的日期对象(Date Object)、日期方法以及如何利用它们创建一个基本的日历组件。 ...

    java时区问题

    创建`Calendar`实例时可以传入`TimeZone`对象,如`Calendar.getInstance(TimeZone timeZone)`。 5. **Java 8及以后的新特性**:从Java 8开始,引入了`java.time`包,包含`ZonedDateTime`, `ZoneId`, `ZoneOffset`等...

    java时间 java.util.Calendar深入分析

    Calendar calendar = Calendar.getInstance(TimeZone zone, Locale locale); ``` `GregorianCalendar`是`Calendar`的唯一子类,可以通过以下方式直接实例化: ```java Calendar calendar = new GregorianCalendar...

    Laravel开发-locale

    在Laravel框架中,"locale"是一个至关重要的概念,它涉及到应用的多语言支持和国际化。Laravel 5本地化包则是为了帮助开发者更轻松地管理和实现应用的多语言功能。接下来,我们将深入探讨Laravel中的locale机制以及...

Global site tag (gtag.js) - Google Analytics