在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。...由于Joda-Time很优秀,在Java 8出现前的很长时间内成为Java中日期时间处理的事实标准,用来弥补JDK的不足。...在Java 8中引入的java.time包是一组新的处理日期时间的API,遵守JSR 310。...它们的详细含义,请参照Java Doc,现查现用,用需求驱动学习。 日历系统和时区 Joda-Time默认使用的是ISO的日历系统,而ISO的日历系统是世界上公历的事实标准。...然而,值得注意的是,ISO日历系统在表示1583年之前的历史时间是不精确的。 Joda-Time默认使用的是JDK的时区设置。如果需要的话,这个默认值是可以被覆盖的。
以前总觉得在Java里面处理各种日期转换很麻烦,虽然我也封装过一些工具包,但是总体感觉还是不够完美,也使用过一些开源的apachecommons里面的时间处理工具类感觉还是不够灵活和强大。...如果您也曾使用这个类处理过日期/时间值,那么您就知道它使用起来有多麻烦。因此当我接触到 Joda-Time — 面向 Java 应用程序的日期/时间库的替代选择 — 我决定研究一下。...并且 Joda 与 JDK 是百分之百可互操作的,因此您无需替换所有 Java 代码,只需要替换执行日期/时间计算的那部分代码。...使用 java.util.Date?事实上这是行不通的,因为自 JDK 1.1 之后的每个 Java 版本的 Javadoc 都声明应当使用 java.util.Calendar。...,可以使用这个类来只存储一天当中的某个时间。
Joda Time出现的背景 在java1.0中,对日期和时间的支持只能依赖java.util.Date类。正如类名所表达的,这个类无法表示日期,只能以毫秒的精度表示时间。...DateFormat不是线程安全的,二个线程同时使用formatter解析日期,你可能会得到无法预期的结果。 在jdk1.8之前,这些问题使得用户们使用了第三方日期和时间库,比如Joda Time。...jdk1.8大量借鉴了Joda Time特任。 Joda Time项目 Java SE 8之前的标准日期和时间类很差。...通过解决这个问题,Joda-Time在Java SE 8之前成为Java的实际标准日期和时间库。...如果我们工作中的jdk版本是1.8版本之前可以使用Joda Time项目,Joda项目中其实包括的不止Joda Time,还包括Joda-Money ,Joda-Beans,Joda-Convert ,
如果您也曾使用这个类处理过日期/时间值,那么您就知道它使用起来有多麻烦。 因此当我接触到 Joda-Time — 面向 Java 应用程序的日期/时间库的替代选择 — 我决定研究一下。...并且 Joda 与 JDK 是百分之百可互操作的,因此您无需替换所有 Java 代码,只需要替换执行日期/时间计算的那部分代码。...Joda 大型项目 Joda 实际上是涵盖众多用于 Java 语言的替代 API 的大型项目,因此从技术上讲,使用 Joda 和 Joda-Time 名称表示相同的意思是一种误称。...事实上这是行不通的,因为自 JDK 1.1 之后的每个 Java 版本的 Javadoc 都声明应当使用 java.util.Calendar。...使用 JDK 实在太痛苦了,即使是简单的日期计算,比如上面这个计算。 正是一年前的这样一个时刻,我第一次领略到 Joda-Time 的强大。
但是,在 Java 5 之后,编译器会自动为我们完成此操作,并且可以安全地使用带有 "+" 的字符串连接。...java.time 包与第三方的 joda.time 非常相似,这意味着我们不需要在使用 joda.time,Jdk8 已经有了内置支持。...我们列出 java.time 中使用的三个最重要的类 LocalDate 表示特定时区的日期(不包括一天中的时间)。...(或任何与 java.util 相关的日期) 不要使用 joda.time(因为它与 java.time 非常相似) 如果只对某个区域的日期感兴趣,请使用 LocalDate 如果对某个区域的日期和时间感兴趣...,请使用 LocalDateTime 如果需要日期时间并且不想处理时区,请使用 Instant
01 — Date 时间类(java.util.Date) 在标准 Java 类库中包含一个 Date 类。它的对象表示一个特定的瞬间,精确到毫秒。...查看 API 文档大家可以看到很多方法过时了,JDK1.1 之前的 Date 包含了:日期操作、字符串转化成时间对象,时间对象。 1.1 之后,日期操作使用:Canlendar 类来。...04 — Joda-Time 传统的我们一般日期处理(格式化时间等)时往往会用java.util.Date这个类,但是对于一些复杂的日期处理就显得力不从心了。...我们在平时项目中可能会遇到将格式化的时间转化为几天前,几个小时这样的形式,那么用 joda-time 就是一个很好的选择。...现在给大家推荐一个很好的第三方日期处理类 org.joda.time.DateTime 既然无法摆脱时间,为何不设法简化时间处理? 这就是 joda-time。
但是,在 Java 5 之后,编译器会自动为我们完成此操作,并且可以安全地使用带有 "+" 的字符串连接。...它不是无法被修改的 它无法处理时区 充满已弃用但仍在使用的遗留代码 当程序中出现对日期支持的需求时,util 包中的 Date、Calendar 和 rest time 类就出现了。...java.time 包与第三方的 joda.time 非常相似,这意味着我们不需要在使用 joda.time,Jdk8 已经有了内置支持。...我们列出 java.time 中使用的三个最重要的类 LocalDate 表示特定时区的日期(不包括一天中的时间)。...(或任何与 java.util 相关的日期) 不要使用 joda.time(因为它与 java.time 非常相似) 如果只对某个区域的日期感兴趣,请使用 LocalDate 如果对某个区域的日期和时间感兴趣
在Java8发布之前繁琐的日期API使我们不得不借助第三方的Jar包Joda来对日期进行操作,而Java8的日期java.time包则是由Joda的作者来进行操刀,我相信不管是因为Java8...性能的提升、函数式编程、流、新的日期API的引入、还是开发者对新兴技术的热情拥抱,我们的新项目基本都是基于Java8开发了,而且因为Java良好的向后兼容性,我们老的项目升级为Java8也并非难事。...zoneId = ZoneId.systemDefault(); //获取该时间点在该时区上的时间日期信息 ZonedDateTime zonedDateTime = now.atZone...JSR310提供支持,只需要在日期字段上加注解 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Mybatis mybatis中数据库字段对应的实体类时间也是默认使用...,实体类为LocalDateTime等的字段就可以识别 SpringDataJPA Spring的做法跟Mybatis的类似,使用一个Jsr310JpaConverters类来做转换,SpringBoot
如果你把 java.sql.Date 通过 JDBC 插入数据库,你会发现时分秒都丢失了,因此如果你同时需要日期和时间,你应该使用 Timestamp,它也是 java.util.Date 的子类。...返回的时间是相对于“1970-01-01 00:00:00” 的毫秒数差值…… 尝试 Joda 吧 最开始的时候,Date 既要承载日期信息,又要做日期之间的转换,还要做不同日期格式的显示,职责较繁杂,...从 JDK 1.1 开始,这三项职责分开了: 使用 Calendar 类实现日期和时间字段之间转换; 使用 DateFormat 类来格式化和分析日期字符串; 而 Date 只用来承载日期和时间信息。...原有 Date 中的相应方法已废弃。不过,无论是 Date,还是 Calendar,都用着太不方便了,这是 API 没有设计好的地方。...比如 Date 和 Calendar 目前是可变对象,你可以随意改变对象的日期或者时间,而 Joda 就将 DateTime 对象设计成 String 对象一样地不可变,能够带来线程安全等等的好处,因此这一点也将被
p=5133 最近有网友表示,在自己公司和项目中,实际上时间库应用不算太多,用到也是非常简单的一些应用场景,一般情况下连Java8的时间库都很少用到,今天为了写个时间查询,把他折腾的够呛,是他没有领悟到...还是他的功力不够?也还是,Java8的时间库真的太 Low ?...一起来看看吧 需求:给定一个时间范围:Date from, Date to,查询出在这时间范围内的记录并按日期(年月日)分组,每条记录的日期是包含日期和时间的,需要进行Truncate。...但是 Java 内部的 Date 和 Localdate 相互之前转换起来真的不够“温柔”。...所以,还是看个人选择! 说归说,吐槽归吐槽。Localdate 和 Localdatetime 的优先级还是要比 Date 高。毕竟,Java8 已经不推荐使用 Date 了。
%E5%90%97/ 其中提到了一个日期应用场景: 项目开发阶段,有一个关于下单发货的需求:如果今天下午3点前进行下单,那么发货时间是明天,如果今天下午3点后进行下单,那么发货时间是后天,如果被确定的时间是周日...作者建议:“对于时间的计算我们要考虑joda-time这种类似的成熟时间计算框架来写代码,它会让代码更加简洁和易读。”...{ @Test @DisplayName("joda和java8日期") void jodaAndJava8DateTest() { LocalDateTime...总结 结合之前未采用java8时封装日期的痛苦经历,最近接触java8日期时间类之后,下决心以后采用java8或者增强的日期时间库来实现日期相关功能。...joda-time 对日期类之间的转换支持更好一些,提供了更丰富的日期处理函数,未来有复杂的日期需求会考虑使用。
Java 8 之前的日期和时间 API Java 8 之前日期类是 java.util.Date,Date 类比较古老,其中的很多方法现在已经废弃了,但是目前仍然有很多程序还在使用 Date 类。...Joda-Time 是 Java SE 8 之前的行业标准日期和时间库 Joda-Time 为 Java 日期和时间类提供了质量替代。现在要求用户迁移到 java.time (JSR-310)。...这个版本被认为是稳定的,是值得使用 2.x 版本。 Joda-Time 需要 java SE 5 或更高版本,并且没有任何依赖项。...Java 8 之后提供了新的日期时间相关类、接口和枚举,这些类型内容非常多。但是使用起来非常方便。...LocalDate 不包含具体时间的日期,比如 2014-01-14。它可以用来存储生日,周年纪念日,入职日期等。
joda-time使用教程 介绍 The Joda project provides quality low-level libraries for the Java platform....Joda项目为Java平台提供了高质量的低级库。https://www.joda.org/ Joda-Time为Java日期和时间类提供了高质量的替代品。...Joda-Time是Java SE 8之前Java的事实上*标准日期和时间库。现在要求用户迁移到java.time(JSR-310)。...https://www.joda.org/joda-time/ 官方文档-快速开始 类总览 LocalDate - 没有时间的日期 LocalTime - 没有日期的时间 Instant -...时间线上的瞬时点 DateTime - 带时区的完整日期和时间 DateTimeZone - 一个更好的时区 Duration - 时间量 Interval - 两个瞬间之间的时间 环境 IntelliJ
API,该用法在规范的开发中是不允许使用的。...但是Calendar依旧很少被使用,上述基础API就已经是很好的说明了。...3、JDK1.8升级API Java8之后的版本中,核心API类包括LocalDate-日期、LocalTime-时间、LocalDateTime-日期加时间。...LocalDate:日期描述是final修饰的不可变类,默认格式yyyy-MM-dd。 LocalTime:时间描述是final修饰的不可变类,默认格式hh:mm:ss.zzz。...三、JodaTime组件 在Java8之前JodaTime组件是大部分系统中的常见选择,有很多方便好用的日期与时间的处理方法封装。
Java8 由Oracle在2014年发布,是继Java5之后最具革命性的版本了。...不幸的是Calendar没有扛起大任,仍然暴露出很多设计缺陷,导致写代码时容易出现问题,比如月份还是从0开始。 由于Date和Calendar推出的时间很接近,造成程序员对使用哪个类感到困惑。...Date和Calendar的种种问题导致程序员们纷纷抛弃原生的jdk日期时间库,转投第三方组件如Joda-Time,Java设计者似乎意识到这个问题,在借鉴Joda-Time的基础上终于在Java8版本中加入了新的日期时间包...Java8 新的日期时间API (1)日期时间常用类 针对日期和时间,Java8提供了LocalDate, LocalTime, LocalDateTime, Instant等常用类。...java8之前使用java.util.TimeZone类处理时区,java8新增ZoneId替代TimeZone。
Java 原本提供了 Date 和 Calendar 用于处理日期、时间的类,包括创建日期 、 时间对象,获取系统当前日期、时间等操作 。...Java 8 吸取了 Joda-Time 库( 一个被广泛使用的日期、 时间库)的经验 , 提供了一套全新的日期时间库 。 在计算机中只需要存储一个整数表示某一时刻。...boolean after(Date when): 测试该日期是否在指定日期 when 之后 。 boolean before(Date when): 测试该日期是否在指定日期 when 之前 。...当然,也可以创建自己的 Calendar 子类,然后将它作为 Calendar 对象使用。 Calendar 类是一个抽象类,所以不能使用构造器来创建 Calendar 对象 。...【6】:DateTimeFormatter详解 【7】:Java日期时间新旧API转换、在数据库中存储日期和时间
本篇主要包括以下内容: TOC Java8之前的日期和时间API的缺陷 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,主要有: Java的java.util.Date和java.util.Calendar...由于以上这些问题,出现了一些第三方的日期处理框架,例如Joda-Time,date4j等开源项目。但是,Java需要一套标准的用于处理时间和日期的框架,于是Java 8中引入了新的日期API。...新的日期API是JSR-310规范的实现,Joda-Time框架的作者正是JSR-310的规范的倡导者,所以能从Java 8的日期API中看到很多Joda-Time的特性。...Duration是两个时间戳的差值,所以使用java.time中的时间戳类,例如Instant、LocalDateTime等实现了Temporal类的日期时间类为参数,通过Duration.between...时区 对时区处理的优化也是Java8中日期时间API的一大亮点。之前在业务中是真的遇到过一些奇葩的时区问题,在旧的java.util.TimeZone提供的时区不全不说,操作还非常繁琐。
(不可变类的一个优点就是它们是线程 安全 的)。用于处理日期计算的 API 方法全部返回一个对应 Joda-time 类的新实例,同时保持原始实例不变。...你可能对这种模式很熟悉,这正是 java.lang.String 的各种操作方法的工作 方式。 瞬间性 Instant 表示时间上的某个精确的时刻,使用从 epoch 开始计算的毫秒表示。...更通用一点的定义是:一个瞬间 就是指时间线上只出现一次且唯一的一个时间点,并且这种日期结构只能以一种有意义的方式出现一次。...DateTimeZone 是 Joda 库用于封装位置概念的类。许多日期和时间计算都可以在不涉及时区的情况下完成,但是仍然需要了解 DateTimeZone 如何影响 Joda 的操作。...好了, 我所了解的就是这么多, 我主要还是从如何使用的角度去学习这个东西, 最后总结了它的几个特性, 当然Joda-Time的强大之处远不止这些, 大家在以后的工作中可以尝试着去使用它.
最重要的是Calendar的API使用起来真的很不方便,而且该类在语义上也完全不符合日期/时间的含义,使用起来更显尴尬。...Moment.js .Net:日期时间处理库Joda-Time 所以说,Java它并不孤单(自我安慰一把) 自我救赎:JSR 310 因为原生的Date日期时间体系存在“七宗罪”,催生了第三方Java日期时间库的诞生...对于Java来说,如此重要的API模块岂能被第三方库给占据,开发者本就想简单的处理个日期时间还得导入第三方库,使用也太不方便了吧。当时的Java如日中天,因此就开启了“收编”Joda-Time之旅。...不客气的说JSR 310是在Joda-Time的基础上建立的,参考了其绝大部分的API实现,因此若你之前是Joda-Time的重度使用者,现在迁移到Java 8原生的JSR 310日期时间上来几乎无缝。...即便这样,也并不能说JSR 310就完全等于Joda-Time的官方版本,还是有些许诧异的,例举如下: 首先当然是包名的差别,org.joda.time -> java.time标准日期时间包 JSR
旧的时间API(java8之前)的问题 线程安全 - Date 和Calendar类不是线程安全的,使开发者难以调试这些api的并发问题,需要编写额外的代码来处理线程安全。...,如小时,分钟和秒,如下所示获取小时: int six = LocalTime.parse("06:30").getHour(); 同LocalDate一样检查特定时间是否在另一特定时间之前或之后。...OffsetDateTime是具有偏移量的日期时间的不可变表示形式。此类存储所有日期和时间字段,精确到纳秒,以及从UTC/格林威治的偏移量。...使用Duration 类似Period ,该Duration类是用来处理时间。...Joda-Time类库 Java 8 日期和时间库的另一种替代方案是Joda-Time库。
领取专属 10元无门槛券
手把手带您无忧上云