JSR 310:一种新的Java日期/时间API

JSR 310 是一个用于执行与时间和日历有关的计算的 API,已经得到 Java SE 7 的推荐。该 API 的 目标是取代现有的两个构成 Java 的当前日期和时间 API 的类:java.util.Date 和 java.util.Calendar,同时仍然提供对这些旧有 API 的向后兼容访问。JSR 当前正在开发,并且该 API 有一个可用的试验性 Javadoc。

对 Java 6 日期/时间 API 的改进

JSR 310 日期/时间 API 试图通过提供更好的性能和易用性改进 Java 的当前日期/时间 API。例如, Java Calendar 类将日期同时存储为与标准纪元之间的偏移量(以毫秒为单位)以及一组日历字段(例如 ,星期几、几号以及月份)。此双精度表示导致在意外的时间重新计算日历字段,从而产生不可预测的性 能特点。与此相比,JSR 310 类仅将日期/时间表示存储为与 Date 和 Calendar 所使用的同一标准纪元 之间的偏移量(以毫秒为单位);仅当需要时才会计算日期等日历字段,并且不会使用这些日历字段进行 内部日期表示。

JSR 310 还对当前 Java 日期/时间模型进行了改进。Java 6 API 不包含表示本地时间(不具有关联 时区的时间)、持续时间或时间间隔的类。这迫使程序员使用令人困惑的设计做法,例如使用 int 表示 持续时间。JSR 310 包含表示上述各个概念的类,从而可以进行更为明确的程序设计。

最后,JSR 310 API 通过使用不可改变的类努力实现线程安全。Java 当前的日期/时间类 Date 和 Calendar 都是可改变的,因而都不是线程安全的。

JSR 310 日期/时间概念

JSR 310 API 利用了从多个第三方 Java 日期/时间 API 中获得的经验。JSR 310 主要基于 Joda Time API;其他影响因素包括 ICU、Time and Money 和 Calendar Date。JSR 310 的 API 是围绕 Joda Time 中使用的相同 5 个基本日期/时间概念构建的:

离散的时间线

瞬间

不完全时间

持续时间

时段

时间间隔

离散的时间线

像 Joda Time 一样,JSR 310 使用离散化的时间线:时间被建模为由小的固定持续时间分隔的连续的 瞬间序列。JSR 310 的离散时间线具有纳秒分辨率,因此可以表示时间“2008 年 1 月 1 日午夜后 1 纳 秒”,但不能表示时间“2008 年 1 月 1 日午夜后 1 皮秒”。该时间线上的每个离散纳秒都被视为一个 瞬间,如下所示。

时间: 2024-12-22 10:14:40

JSR 310:一种新的Java日期/时间API的相关文章

Java日期时间使用方法汇总_java

一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题.  在Java中,操作日期主要涉及到一下几个类: 1.java.util.Date        类 Date 表示特定的瞬间,精确到毫秒.从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串.Date 中的把日期解释为年.月.

Java日期时间操作的方法_java

本文实例为大家分享了java日期时间基本操作方法,供大家参考,具体内容如下 1. 获得Calendar实例:Calendar c = Calendar.getInstance(); 2. 定义日期/时间的格式:SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3. 把日期/时间转换成固定格式,使用SimpleDateFormat的format()方法:String datetime = sdf.form

Java日期时间正则表达式 Java日期时间操作的方法

1. 获得Calendar实例:Calendar c = Calendar.getInstance(); 2. 定义日期/时间的格式:SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3. 把日期/时间转换成固定格式,使用SimpleDateFormat的format()方法: String datetime = sdf.format(c.getTime()); 4. 把字符串转换成日期/时间,使用Si

java8的日期时间API

java8 datetime api有什么 LocalDate LocalDate 与 Date 转换 LocalTime LocalDateTime LocalDateTime 与 Date Instant ZoneId 日期计算 Java的日期时间API,一直有一些令人头疼的问题. 有了 java.util.Date 又搞出个java.sql.Date,改个名字不行? 好好的new Date(year,month,day) 早早的就被标记为 @Deprecated,那时候还是jdk1.1,如

Java8新日期时间API的20个使用示例_java

除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API.Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修改的以及将SimpleDateFormat实现成非线程安全的.看来Java已经意识到需要为时间及日期功能提供更好的支持了,这对已经习惯使用Joda时间日期库的社区而言也是件好事.关于这个新的时间日期库的最大的优点

Java日期时间 java.util.Calendar和GregorianCalendar分析

Java的java.util.Calendar用于日期和时间的运算.无论任何时候,只要你有一些轻微操作(除了仅仅表示日期和时间)需要执行,那么就使用这个类.(原文:Whenever you have something slightly more advanced than just representing a date and time, this is the class to use.) java.util.Calendar类是抽象的,意味着你不能对其进行实例化.这么设计的原因是这个世界

一些淡忘了的Java日期时间函数

今天舍友问我,JDBC中的stmt.setDate()怎么挺入当前时间,传入参数new java.util.Date()不行, 传入 参数new java.sql.Date(),试了一会,还是不行.此时,才发觉,自从用了Hibernate,JPA之后, 我连原始的东西都忘记了.这可是一个很可悲的问题,决定来一次小测试! package test; import java.sql.Timestamp; import java.text.DateFormat; import java.text.Pa

java日期时间问题-为何指定时间加上1小时,个别会出错?

问题描述 为何指定时间加上1小时,个别会出错? 为了说明问题,请看下面一小段代码 import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Cs { public static void main(String[] args) { Simpl

Java I/O API之性能分析

性能 要: IO API的可伸缩性对Web应用有着极其重要的意义.Java 1.4版以前的API中,阻塞I/O令许多人失望.从J2SE 1.4版本开始,Java终于有了可伸缩的I/O API.本文分析并计算了新旧I/O API在可伸缩性方面的差异. 提纲: 一.概述二.用旧API编写的HTTP服务器三.非阻塞的HTTP服务器四.注册与处理过程详解五.可伸缩性的定量分析和比较 正文: 一.概述 IO API的可伸缩性对Web应用有着极其重要的意义.Java 1.4版以前的API中,阻塞I/O令许多