JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于 java.time 包中,下面是一些关键类。
在Java的世界里,有一个被称为LocalDateTime的类,它如同一个精密的时钟,无声无息却又精准无误地记录着时间的流转。这个类是Java 8引入的一部分,它的目的是为了改进Java的日期和时间处理。
新时间对象: 1.LocalDate表示年月日 2.LocalTime表示时分秒 3.LocalDateTime表示年月日时分秒 4.Instant:表示时刻,不直接对应年月日信息,需要通过时区转换 5.ZonedDateTime: 表示特定时区的日期和时间 6.ZoneId/ZoneOffset:表示时区 1、获取对象的方法 //通过静态方法now()获取当前时间 LocalDate now1 = LocalDate.now(); LocalTime now2 = LocalTim
文章目录 前言 一、时间日期类 1.新增日期类 2.LocalDateTime创建方法 3.LocalDateTime获取方法 4.LocalDateTime转换方法 5.LocalDateTime格式化和解析 6. LocalDateTime增加或者减少时间的方法 7.LocalDateTime减少或者增加时间的方法 8.LocalDateTime修改方法 9.Period 10. Duration 前言 上篇已经讲过时间日期类 的基础用法,这篇讲的是时间日期类的高级用法 一、时间日期类 1.新增日期类
这边值得一提的是在中国的时区偏移是8小时,本次示例转的时间戳是秒级别,得到的值是一个long值;知识追寻者这边是当前时间,故读者得到的结果与知识追寻者得到的结果不一致;读者可以使用站长工具进行测试校验
Java里的日期和时间格式化问题,在JDK8(Java SE Development Kit8,以下使用过程中,均称为JDK1.8或者JDK8)以前有很多问题,例如日期类并不提供国际化,没有时区支持,包分配的也比较混乱。所以在JDK8后进行了大改造,索性在rt.jar中新增了一个time包,这样我们就可以个性化设置日期时间的展示方式了。
当工作中遇到时间处理,我们是否首先想到JAVA提供的Date和Calendar,用于处理日期、时间的类,包括创建日期、时间对象,获取系统当前日期、时间等操作。
Java8发布,已有数年之久,但是发现很多人都还是坚持着用SimpleDateFormat和Date进行时间操作。SimpleDateFormat这个类不是线程安全的,在使用的时候稍不注意,就会产生致命的问题。Date这个类,是可以重新设置时间的,这对于一些类内部的属性来说,是非常不安全的。
参考 https://blog.csdn.net/duan196_118/article/details/111597682 https://blog.csdn.net/qq_24754061/article/details/95500209 https://xijia.blog.csdn.net/article/details/106007147
在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法、Java 8 新的时间和日期API进行讲解。
来源:juejin.im/post/5d7787625188252388753eae
``` public class LocalDateTimeUtil { /** * 将Long类型的时间戳转换成String 类型的时间格式,时间格式为:yyyy-MM-dd HH:mm:ss */ public static String convertTimeToString(Long time){ if (StringUtils.isEmpty(time)){ return null; } DateTimeFormatter ftf = DateTimeF
本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和Calendar,由于它的设计有一些不足,业界广泛使用的是一个第三方的类库Joda-Time,关于Joda-time,我们在33节进行了介绍。Java 1.8学习了Joda-time,引入了一套新的API,位于包java.time下,本节,我们就来简要介绍这套新的API。 我们先从日期和时间的表示开始。 表示
现在LocalDateTime、LocalDate、Date之间的相互转换就完成了
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
JDK 8 已经在 2014年 3月 18日正式可用 ,距离现在已经 5年多时间过去了。5年时间里很多企业也都换上了 JDK 8,明年 3月份 Jdk14 也要来了,那么 Jdk 8 的新特性你真的用起来了吗?我准备写一个 Jdk 8开始的新特性介绍以及使用的系列文章,后续 Jdk 也会继续更新,你如果需要的话不妨关注下博客或者公众号。
最近在使用Java的java.time包中的日期和时间处理功能时,遇到了一个问题:当尝试将字符串解析为LocalDateTime对象时,出现了DateTimeParseException异常。异常信息如下:
多线程并发如何保证线程安全 - 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat对象 => 创建和销毁对象的开销大 - 对使用format和parse方法的地方进行加锁 => 线程阻塞性能差 - 使用ThreadLocal保证每个线程最多只创建一次SimpleDateFormat对象 => 较好的方法
在项目开发过程中经常遇到日期时间处理,但是你真的用对了吗,理解阿里巴巴开发手册中禁用static修饰SimpleDateFormat吗
当前时间:2019年10月24日。距离 JDK 14 发布时间(2020年3月17日)还有多少天?
在项目开发过程中经常遇到时间处理,但是你真的用对了吗,理解阿里巴巴开发手册中禁用static修饰SimpleDateFormat吗?
需要的包: import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAccessor; import j
在平常时开发过程中,总有很多奇奇怪怪的时间需要互相转换,比如 Date to String , Date to DateTime , String to Date , String to DateTime ,Date to TimeStamp等等……,中间就算对JavaApi再熟悉也难免会搞混,还不如做一些简单的记录,方便日后需要用到之时直接复制出来使用即可。
Java8 带来了全新的处理日期和时间的方式。几乎所有人都有使用Java Date API痛苦的经历。因此有很多人切换到了Joda Time,但是Java8现在有了媲美Joda的时间API。在学习API前,先了解一下日期和时间的概念。Java日期遵循公历规则。表示时间和日期的类放在java.time包中。在这个包里比较重要的API有:
1.LocalDate转Date LocalDate nowLocalDate = LocalDate.now(); Date date = Date.from(nowLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 2.LocalDateTime转Date LocalDateTime localDateTime = LocalDateTime.now(); Date date = Date.from(localDateT
(以Unix元年: 1970年1月1日 00:00:00 到某个时间之间的毫秒值)
Java 8 出来很久了,各位也可能已经在用了,不过其中新的时间日期 API 可能很少人用,甚至不知道怎么上手。本文快速介绍一下其中的主要的类的概念和用法。 一、时间戳 Instant Instant 表示一个 EPOCH 时间戳(即以 0 表示 1970-01-01T00:00:00Z),精确到纳秒。 Instant 对象不包含时区信息,且值是不可变的。 虽然概念很简单,但是它可以很方便的和其他时间日期对象之间进行交互和转换。比如: 两个 Instant 可以用来构建一个时间段; 一个 Instant 加
calendar是共享变量,并且这个共享变量没有做线程安全控制。当多个线程同时使用相同的SimpleDateFormat对象【如用static修饰的SimpleDateFormat】调用format方法时,多个线程会同时调用calendar.setTime方法,可能一个线程刚设置好time值另外的一个线程马上把设置的time值给修改了导致返回的格式化时间可能是错误的。在多并发情况下使用SimpleDateFormat需格外注意SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。parse方法实际调用alb.establish(calendar).getTime()方法来解析,alb.establish(calendar)方法里主要完成了
Java8 之前,对于日期和时间的操作主要是通过 Date 来完成的,但是 Date 类的设计存在诸多不足。
LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。
https://www.yiibai.com/javatime/javatime_localdate.html
2.类比较多,既有java.util.Date、又有java.sql.Date,同时Data的format和parse又在java.util.txt下。
通过执行结果可以看到用SimpleDateFormat对含有微秒值的时间格式在字符串转Date时除了会出现精度丢失的情况,部分时间还会出现转换错误的情况,而用DateTimeFormatter对含有微妙值的时间格式字符串转LocalDateTime则一切正常。 但是一般业务不会用到时间格式的毫秒或者说微秒值,如果真的用到的话建议用LocalDateTime存储,Mysql需要用datetime(6)这样就可以保存微秒值的时间,如图
LocalDate转Date LocalDate nowLocalDate = LocalDate.now(); Date date = Date.from(localDate.atStartOfDay( ZoneOffset.ofHours(8)).toInstant()); LocalTime转Date public void LocalTimeToUdate() { LocalTime localTime = LocalTime.now(); LocalDate localDa
java.time.Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。
JDK8中的新特性:用 LocalDateTime 与 DateTimeFormatter 代替了老的 Date 与 SimpeDateFormat,更加的方便,进行时间日期的运算也更加简洁了。
其他的类库还有Year、Month、DayOfWeek、MonthDay、YearMonth等。值得注意的是:JSR-310增加的日期API是严格区分年月日-时分秒格式的日期表示类,例如XXXDateTime一定表示为年月日时分秒(纳秒),XXXTime只能表示时分秒(纳秒),XXXDate只能表示年月日。
本人前段时间经历了一个全球化的报表项目(java+mysql),刚开始业务只在国内开展,所有报表用户都是中国人,涉及时间/日期的数据,统一用北京时间即可。后来业务逐渐扩大到海外市场,很多国外用户也会使用该系统,这样默认用北京时间来显示就不太友好了。
本文目前提供:LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转
Java 8为Date和Time引入了新的API,以解决旧java.util.Date和java.util.Calendar的缺点。
也许平时开发中你只用到过LocalDateTime这个API,那是极好的,但是不能止步于此,否则就图样图森破了。
领取专属 10元无门槛券
手把手带您无忧上云