本文告诉大家在拿到任意时区的 DateTimeOffset 对象,将 DateTimeOffset 转换为使用中国的 +8 时区表示的时间 在开始之前,需要说明的是,采用 DateTimeOffset...会比 DateTime 更优的一个点是 DateTimeOffset 是带上时区的,这就意味着方便的在多个不同的时区进行传递和序列化的时候,不会丢失原来的信息 现在也推荐更多的使用 DateTimeOffset...类型而不是 DateTime 类型,除非是明确只有本机时间且后续没有需求变更才会考虑使用 DateTime 类型 可选的转换为任意国家地区的时区时间,可以是先通过 TimeZoneInfo 的 FindSystemTimeZoneById...,通过以下代码即可将任意时区的时间转换为中国对应的时区的时间 TimeZoneInfo?...在有一些奇怪的系统上,会抛出 TimeZoneNotFoundException 异常,此时可以使用固定中国的 +8 小时作为对比 UTC 时间 此时需要先将传入的 DateTimeOffset 转换为
本文链接:https://blog.csdn.net/qq_37933685/article/details/84977052 文章目录 joda-time使用教程 介绍 类总览 环境 配置 简单使用...Joda项目为Java平台提供了高质量的低级库。https://www.joda.org/ Joda-Time为Java日期和时间类提供了高质量的替代品。...https://www.joda.org/joda-time/ 官方文档-快速开始 类总览 LocalDate - 没有时间的日期 LocalTime - 没有日期的时间 Instant -...时间线上的瞬时点 DateTime - 带时区的完整日期和时间 DateTimeZone - 一个更好的时区 Duration - 时间量 Interval - 两个瞬间之间的时间 环境 IntelliJ... 简单使用 joda 转 str @Test public void testJodaToStr(){ DateTime
) 时区(Time zone) 我将针对 Joda 依次讨论每一个概念。...任何严格的时间计算都必须涉及时区(或相对于 GMT),除非在同一个时区内发生了相对时间计算(即时这样时区也很重要,如果事件对于位于另一个时区的各方存在利益关系的话)。...使用另一个对象(例如,java.util.Date,或者是另一个 Joda 对象)。 我将在第一个类中介绍这些构造函数: DateTime。...用于处理这种时间片段的两个有用类分别为 LocalDate 和 LocalTime: LocalDate:该类封装了一个年/月/日的组合。当地理位置(即时区)变得不重要时,使用它存储日期将非常方便。...这是 Joda 设计者进行了改进的另一个特性。
而且经常混乱还容易出错,相信大家应该都用过救民于水火的 joda Datetime 对象吧,简直是活菩萨。 时间来到 JDK 8 以后的版本了,我们还需要使用 joda 吗?...上面的原文就是 Joda 已经不再积极进行开发了,只是进行一些时区数据的维护了。 所有的功能你应该都可以使用 java.time 来实现了。...简单来说就是如果你使用的是 JDK 8 以后的版本,你可以慢慢将 Joda 从你的项目中移除了,如果你还使用的是早期的版本,那么你还是需要导入的。...除非你重新 new 一个。 使用 ZonedDateTime 创建一个对象和 Date 创建一个对象是一样的,都是获得当前时区的时间。...Date 和 ZonedDateTime 创建的时间为带有时区的本地计算机的时间。 Date 和 ZonedDateTime 都可以转换为 Instant,不需要添加时区偏移量。
查看源码可以知道, DateTime.parse就是将输入的时间转换为后面的格式, 转换的结果为: ?...Joda-time支持的时间跨度有三个,分别如下: Interval :根据开始、结束时间表示一个特定的时间跨度。...我喜欢将局部时间片段看作一个重复周期中的一点,这样的话,如果我正在考虑的日期构建可以以一种有意义的方式出现多次(即重复的),那么它就是一个局部时间。...受 Joda 支持的年表的例子包括:ISO(默认)、Coptic、Julian、Islamic等。 时区 时区是值一个相对于英国格林威治的地理位置,用于计算时间。...任何严格的时间计算都必须涉及时区(或相对于 GMT),除非在同一个时区内发生了相对时间计算(即时这样时区也很重要,如果事件对于位于另一个时区的各方存在利益关系的话)。
) 时区(Time zone) 我将针对 Joda 依次讨论每一个概念。...任何严格的时间计算都必须涉及时区(或相对于 GMT),除非在同一个时区内发生了相对时间计算(即时这样时区也很重要,如果事件对于位于另一个时区的各方存在利益关系的话)。...使用另一个对象(例如,java.util.Date,或者是另一个 Joda 对象)。 我将在第一个类中介绍这些构造函数:DateTime。...用于处理这种时间片段的两个有用类分别为 LocalDate 和 LocalTime: LocalDate:该类封装了一个年/月/日的组合。当地理位置(即时区)变得不重要时,使用它存储日期将非常方便。...这是 Joda 设计者进行了改进的另一个特性。
Calendar类的主要方法: static Calendar getInstance():使用默认时区和语言环境获得一个日历。...TimeZone tz = TimeZone.getTimeZone("GMT+08:00"); Locale Locale 表示国家(或地区)和语言,它有两个主要参数:一个是国家(或地区);另一个是语言...DateFormat 中提供日期格式化和日期解析方法,具体方法说明如下: String format(Date date):将一个 Date 格式化为日期/时间字符串。...这个版本被认为是稳定的,是值得使用 2.x 版本。 Joda-Time 需要 java SE 5 或更高版本,并且没有任何依赖项。...Joda-Convert 上有一个编译时依赖项,但由于有神奇的注释,这在运行时不是必需的。
JSR-310规范提供一个新的和改进的Java日期与时间API,该规范领导者Stephen Colebourne就是joda-time作者,因此很多环节很像joda-time。...日期时间API将日期和时间分开为LocalDate和LocalTime; 既有日期又有时间,则使用 LocalDateTime; 改善了jdk的TimeZone,使用更优雅的ZoneId; 增加了 Instant...Instant 和 LocalDateTime Instant 和 LocalDateTime的区别在于,前者是时间线上的一个绝对时刻,而LocalDateTime是Instant在不同时区的一个时间表示...from: 静态工厂转换方法,从另一个时间取值创建对象。 until: 计算时间差 get*:获取某些东西的值。 is*:检查某些东西的是否是true。...to*:转换到另一个类型。 at*:把这个对象与另一个对象组合起来,例如:instant.atZone(zoneId)。
比如,在Joda-Time中常用的Interval(用来表示一对DateTime),在JSR 310中并不支持。因此,另一个名叫Threeten的第三方库用来弥补Java 8的不足。...Instant比较适合用来表示一个事件发生的时间戳。不用去关心它使用的日历系统或者是所在的时区。 DateTime的主要目的是替换JDK中的Calendar类,用来处理那些时区信息比较重要的场景。...DateTime(long instant):这个构造方法创建出来的实例,是通过一个long类型的时间戳,它表示这个时间戳距1970-01-01T00:00:00Z的毫秒数。使用默认的时区。...日历系统和时区 Joda-Time默认使用的是ISO的日历系统,而ISO的日历系统是世界上公历的事实标准。然而,值得注意的是,ISO日历系统在表示1583年之前的历史时间是不精确的。...Joda-Time默认使用的是JDK的时区设置。如果需要的话,这个默认值是可以被覆盖的。
日期和时间是一个比较复杂的概念,Java API中对它的支持不是特别好,有一个第三方的类库反而特别受欢迎,这个类库是Joda-Time,Java 1.8受Joda-Time影响,重新设计了日期和时间API...这个整数表示的是一个时刻,与时区无关,世界上各个地方都是同一个时刻,但各个地区对这个时刻的解读,如年月日时分秒,可能是不一样的。 如何表示1970年以前的时间呢?使用负数。...转换为字符串,parse将字符串转换为Date。...Date的字符串表示与TimeZone和Locale都是相关的,除此之外,还与两个格式化风格有关,一个是日期的格式化风格,另一个是时间的格式化风格。...解决这个问题大概有以下方案: 每次使用DateFormat都新建一个对象 使用线程同步 使用ThreadLocal 使用Joda-Time,Joda-Time是线程安全的 后续文章我们再介绍线程同步和ThreadLocal
,由于它的设计有一些不足,业界广泛使用的是一个第三方的类库Joda-Time,关于Joda-time,我们在33节进行了介绍。...时刻:所有计算机系统内部都用一个整数表示时刻,这个整数是距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数,可以理解时刻就是绝对时间,它与时区无关,不同时区对同一时刻的解读,即年月日时分秒是不一样的...,使用不同时区解读,日历信息是不同的,Instant有方法根据时区返回一个ZonedDateTime: public ZonedDateTime atZone(ZoneId zone) 默认时区是ZoneId.systemDefault...比如,将LocalDateTime按默认时区转换为Date,代码可以为: public static Date toDate(LocalDateTime ldt){ return new Date...(ldt.atZone(ZoneId.systemDefault()) .toInstant().toEpochMilli()); } 将ZonedDateTime转换为Calendar
简介 Java8 带来了全新的处理日期和时间的方式。几乎所有人都有使用Java Date API痛苦的经历。因此有很多人切换到了Joda Time,但是Java8现在有了媲美Joda的时间API。...保存的是UNIX时间戳的秒数,同时有另一个字段保存纳秒。 java.time.LocalDate: 保存日期时间中的日期,用年-月-日表示。不包含时区,是不可变类。...java.time.ZoneDateTime: 保存LocalDateTIme,使用ZoneOffset保存时区信息。可以访问ZoneRule来转换本地时间。...将LocalDateTime转换成其他时区时间 System.out.println(localDateTime.atZone(ZoneId.of("America/New_York"))); //...通过解析字符串创建LocalDateTime LocalDateTime parsedLocalDateTime = LocalDateTime.parse("2014-01-01T11:00"); 创建另一个时区的
(并且也借鉴了第三方日期库joda很多的优点) 在java8中,java.time包下主要包含下面几个主要的类: Instant:时间戳 Duration:持续时间,时间差 LocalDate:...:时间段 ZoneOffset:时区偏移量,比如:+8:00 ZonedDateTime:带时区的时间 Clock:时钟,比如获取目前美国纽约的时间 以及java.time.format...在java8中,可以使用MonthDay,该类不包含年份信息,当然还有一个类是YearMonth LocalDate birthday = LocalDate.of(1990, 10, 12); MonthDay...java8中,将日期,时间,时区都很好的进行了分离。...,我们可以直接将时间转换为标准的时间格式: String specifyDate = "20151011"; DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE
ZonedDate和Time - 在旧的时间api中开发人员必须编写额外的逻辑来处理旧API的时区逻辑,而使用新的API,可以使用 Local和ZonedDate / Time API来处理时区。...正如他们的名字所示,它们代表与上下文相结合的本地日期/时间。 这些类主要用于不需要在上下文中明确指定时区的情况。作为本节的一部分,我们将介绍最常用的API。 3.1。...鉴于上面的LocalDateTime实例,下面的代码示例将返回2月份的月份: localDateTime.getMonth(); 4.使用ZonedDateTime API 当我们需要处理时区特定的日期和时间时...(finalTime, initialTime); 现在我们来看看如何将旧的Date 和Calendar 转换为新的Date和Time。...Joda-Time类库 Java 8 日期和时间库的另一种替代方案是Joda-Time库。
这样做的原因是,在第 3 行中,运行时必须将 sum 变量转换为原始 int(自动拆箱),并且在执行添加后,结果将包装在一个新的 Integer 类中(自动装箱)。...它本质上是 LocalDateTime,但强制使用 UTC 时区。在应用程序中需要处理时区时,最好在所有服务和数据库中使用同一个时区。...当使用 Instant 时,一切都变成了 UTC,然后读者可以根据需要将其转换为不同的时区。...(或任何与 java.util 相关的日期) 不要使用 joda.time(因为它与 java.time 非常相似) 如果只对某个区域的日期感兴趣,请使用 LocalDate 如果对某个区域的日期和时间感兴趣...,请使用 LocalDateTime 如果需要日期时间并且不想处理时区,请使用 Instant
这样做的原因是,在第 3 行中,运行时必须将 sum 变量转换为原始 int(自动拆箱),并且在执行添加后,结果将包装在一个新的 Integer 类中(自动装箱)。...我们列出 java.time 中使用的三个最重要的类 LocalDate 表示特定时区的日期(不包括一天中的时间)。...它本质上是 LocalDateTime,但强制使用 UTC 时区。在应用程序中需要处理时区时,最好在所有服务和数据库中使用同一个时区。...当使用 Instant 时,一切都变成了 UTC,然后读者可以根据需要将其转换为不同的时区。...(或任何与 java.util 相关的日期) 不要使用 joda.time(因为它与 java.time 非常相似) 如果只对某个区域的日期感兴趣,请使用 LocalDate 如果对某个区域的日期和时间感兴趣
DateFormat不是线程安全的,二个线程同时使用formatter解析日期,你可能会得到无法预期的结果。 在jdk1.8之前,这些问题使得用户们使用了第三方日期和时间库,比如Joda Time。...如果我们工作中的jdk版本是1.8版本之前可以使用Joda Time项目,Joda项目中其实包括的不止Joda Time,还包括Joda-Money ,Joda-Beans,Joda-Convert ,...没有时区概念,比如utc时间 为2010-12-1T11:22:33.567Z,如果是表示时区概念一般2010-12-1T11:22:33.567+08:00 关于Joda Time其他的日期和时间api...LocalDateTime 一个没有时区概念的日期-时间类在ISO-8601 日期系统中,比如2007-12-03T10:15:30 ?...总结 java8提供的日期-时间对象是不可变的。操作的结果总是返回一个新的实列,老的日期时间对象不会发生改变。所以提供的这些类都很简单,但是需要我们多去使用它。
Joda-Time 上节介绍了JDK API中的日期和时间类,我们提到了JDK API的一些不足,并提到,实践中有一个广泛使用的日期和时间类库,Joda-Time,本节我们就来介绍Joda-Time。...TimeZone 时区 DateTimeFormatter DateFormat 格式化 需要说明的是,这只是一个非常粗略的对应,并不严谨,Joda-Time也还有非常多的其他类。...DateTimeFormat,另一个是DateTimeFormatter。...DateTimeFormatter是具体的格式化类,提供了print方法将DateTime转换为字符串。...plusDays(6).withDayOfWeek(1)将时间设为第一个周一。
同时java.util.Date中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端。并且也借鉴了第三方日期库joda很多的优点。...ZonedDateTime:带时区的时间 Clock:时钟,比如获取目前美国纽约的时间 以及java.time.format包中的 DateTimeFormatter:时间格式化 下面我们通过例子来看如何使用...在java8中,可以使用MonthDay,该类不包含年份信息,当然还有一个类是YearMonth LocalDate birthday = LocalDate.of(1990, 10, 12); MonthDay...java8中,将日期,时间,时区都很好的进行了分离。...,我们可以直接将时间转换为标准的时间格式: String specifyDate = "20151011"; DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE
比如要表示2019年6月18日,创建一个Date实例: Date date = new Date(119, 5, 18); Date类已经不推荐使用了。...由于Date和Calendar推出的时间很接近,造成程序员对使用哪个类感到困惑。 还有一个很大的问题,Date和Calendar都是可变的类,这种设计会导致程序出现各种问题。...Date和Calendar的种种问题导致程序员们纷纷抛弃原生的jdk日期时间库,转投第三方组件如Joda-Time,Java设计者似乎意识到这个问题,在借鉴Joda-Time的基础上终于在Java8版本中加入了新的日期时间包...System.out.println(dateTime.format(DateTimeFormatter.ISO_DATE_TIME)); // output: 2019-07-23T23:09:19.31 (4)时区使用方法...java8之前使用java.util.TimeZone类处理时区,java8新增ZoneId替代TimeZone。
领取专属 10元无门槛券
手把手带您无忧上云