java开源时间

任何公司应用程序都急需处理时间难题。应用程序需求驾驭当前的时间点和下三个时间点,有时它们还必须总括那三个时间点之间的路径。使用
JDK 达成那项职责将特别痛心和麻烦。以后来探视 Joda Time,2个面向 Java™
平台的不难使用的开源时间/日期库。正如你在本文中打听的那样,Joda-Time
轻松化解了处理日期和岁月的伤痛和麻烦。

 

在编排集团应用程序时,笔者时常需求处理日期。并且在本人的新星类型中 —
保证行业 —
核对日期总括尤其首要。使用 java.util.Calendar 让本人有个别不安。如若您也曾选用这一个类处理过日期/时间值,那么你就清楚它利用起来有多辛劳。因而当本人接触到
Joda-Time — 面向 Java 应用程序的日子/时间库的替代选用 —
作者说了算钻探一下。其结果是:笔者很庆幸小编那样做了。

Joda-Time 令时间和日期值变得不难管理、操作和透亮。事实上,易于使用是
Joda
的重中之重设计目的。其余指标蕴含可扩充性、完整的特点集以及对三种日历系统的协助。并且
Joda 与 JDK 是百分之百可互操作的,因而你无需替换全数 Java
代码,只供给替换执行日期/时间测算的那有些代码。

 

Joda 实际上是富含众多用来 Java 语言的代表 API
的大型项目,因此从技术上讲,使用 Joda 和 Joda-Time
名称表示无异的情致是一种误称。但在撰写本文之际,Joda-Time API
近来就如是绝无仅有处于活跃开发情形下的 Joda API。考虑到 Joda
大型项指标当前景况,小编想将 Joda-Time 简称为 Joda 应该没什么难题。

 

为何要选拔 Joda?考虑成立二个用时间代表的某部随意的随时 — 比如,2000年 1 月 1 日 0 时 0 分。笔者什么创造一个用时间代表那么些弹指间的 JDK
对象?使用 java.util.Date?事实上那是没用的,因为自 JDK 1.1
之后的种种 Java 版本的 Javadoc
都宣示应当选择 java.util.CalendarDate 中差别情使用的构造函数的多寡严重限制了您成立此类对象的门路。

然而,Date 确实有一个构造函数,您能够用来成立用时间表示有个别须臾间的靶子(除
“以后” 以外)。该办法运用距离 1968 年 1 月 15日卯时格林威治标准时间(也称之为 必发bifa88手机客服端,epoch)以来的皮秒数作为三个参数,对时区举行校勘。考虑到
Y2K 对软件开发集团的首要性,您也许会觉得笔者早已记住了那个值 —
不过本人从不。Date 也也才那样。

 

那么 Calendar 又怎么着呢?小编将动用上面的不二法门创制必需的实例:

Calendar calendar = Calendar.getInstance();
calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);

 

利用 Joda,代码应该接近如下所示:

DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);

Joda 使用以下概念,它们得以行使到其它日期/时间库:

  • 不可变性(Immutability)
  • 瞬间性(Instant)
  • 局部性(Partial)
  • 年表(Chronology)
  • 时区(Time zone)

自家将针对 Joda 依次切磋各种定义。

不可变性

本人在本文钻探的 Joda
类具有不可变性,因而它们的实例不可能被修改。(不可变类的2个独到之处正是它们是线程安全的)。小编将向你显示的用于拍卖日期计算的
API 方法漫天再次来到一个应和 Joda
类的新实例,同时保持原来实例不变。当你通过3个 API 方法操作 Joda
类时,您必须捕捉该方法的再次来到值,因为你正在处理的实例无法被改动。您也许对那种情势很纯熟;比如,这多亏 java.lang.String 的各个操作方法的工作方式。

瞬间性

Instant 表示时间上的某部精确的随时,使用从 epoch
开头盘算的微秒表示。这一概念与 JDK 相同,这便是怎么别的Joda Instant 子类都足以与 JDK Date 和 Calendar 类包容的缘由。

更通用一点的概念是:多个瞬间 正是指时间线上只现出壹回且唯一的一个时间点,并且那种日子结构只可以以一种有意义的法子面世一回。

局部性

二个有个别时间,正如小编将在本文中校其誉为局部时间有个别一样,它指的是光阴的一局部片段。瞬间性钦命了与
epoch
相对的小时上的一个准儿时刻,与此相反,局地时间部分指的是在时间上得以来回
“移动” 的二个时时,这样它便得以利用于八个实例。比如,6 月 2
 能够动用于自由一年的 6 月份(使用 格雷戈orian
日历)的第贰天的即兴须臾间。同样,11:06
p.m.
 可以接纳于自由一年的肆意一天,并且每一天只可以选择3遍。即便它们没有点名3个时间上的精确时刻,局地时间部分仍旧是行得通的。

自作者爱好将一些时间有些看作四个再次周期中的一点,那样的话,假若自个儿正在考虑的日子营造能够以一种有含义的方法出现数次(即重复的),那么它正是二个局地时间。

年表

Joda 本质 — 以及其设计为主 —
的要紧正是年表(它的意义由3个同名抽象类捕捉)。从根本上讲,年表是一种日历系统
— 一种总结时间的特别形式 — 并且是一种在里边进行日历算法的框架。受 Joda
扶助的年表的例子包涵:

  • ISO(默认)
  • Coptic
  • Julian
  • Islamic

Joda-Time 1.6 帮忙 8 种年表,每种都足以视作特定日历系统的乘除引擎。

时区

时区是值2个针锋相对于United Kingdom格林威治的地理地点,用于总计时间。要询问事件发生的可信赖时间,还必须清楚产生此事件的职位。任何严峻的时光测算都不能够不涉及时区(或相对于
维生霉素T),除非在同三个时区内发出了针锋相对时间测算(即时如此时区也很重庆大学,假设事件对于位于另三个时区的各方存在利益关系的话)。

DateTimeZone 是 Joda
库用于封装地点概念的类。许多日子和岁月测算都足以在不涉及时区的动静降低成,不过依旧供给掌握 DateTimeZone 怎样影响
Joda
的操作。私下认可时间,即从运转代码的机械的系统时钟检索到的时间,在超越三分之一情状下被选拔。

谈到日期处理,Joda
是一种令人愕然的登时工具。无论你是一个钱打二14个结日期、打字与印刷日期,或是解析日期,Joda
都将是工具箱中的便捷工具。在本文中,小编首先介绍了 Joda,它能够看作 JDK
日期/时间库的替代接纳。然后介绍了有的 Joda 概念,以及哪些行使 Joda
执行日期计算和格式化。

Joda-Time
衍生了部分有关的连串,您恐怕会发觉那些项目很有用。以后出现了2个针对性
Grails Web 开发框架的 Joda-提姆e 插件。joda-time-jpox
项指标靶子正是增加一些须要的照射,以使用 DataNucleus 持久化引擎持久化
Joda-Time 对象。并且,1个对准 谷歌(Google) Web Toolkit(也号称 Goda-Time)的
Joda-提姆e 达成最近正在开发个中

相关文章