JDK8-日期时间新方式
2020-12-28 17:21
381 查看
日期时间新方式
在日常开发中,对于日期操作是非常常见的,但是对于有经验的开发人员来说Java8之前的日期操作是有较大问题 的。比方说SimpleDateFormat。但是在Java8之后提出了DateTimeFormatter用于解决之前的问题。
SimpleDateFormat的那些坑
SimpleDateFormat本身是线程不安全的,同时继承的DateFormat类也不是线程安全的,在多线程环境下,如果多个线程使用同一个类解析日期,如果将SimpleDateFormat定义为static,所以在多线程下它的实例会被多线程共享,线程之间相互读取时间,就会出现时间差异和其他的那些异常。
DateTimeFormatter 、LocalDate、LocalTime、LocalDateTime
Java8对于日期时间操作提供了一些新类供我们进行使用,现在可以通过DateTimeFormatter来替换掉 SimpleDateFormat。通过LocalDate、LocalTime、LocalDateTime类来操作日期+时间。而且由源码可知,这些类都是不可变更,线程安全的类。其内部提供了若干用于操作日期的方法。
DateTimeFormatter 、LocalDate、LocalTime、LocalDateTime的常用方法
/** * @author 我是七月呀 * @date 2020/12/28 */ public class LocalDateDemp { public static void main(String[] args) { /** * 根据自己需求获取任意时间,例如:2020-12-28 14:57:00 * */ LocalDateTime of = LocalDateTime.of(2020, 12, 28, 14, 57, 00); String format = of.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); System.out.println(format); /** * 注意:这里的YYYY是表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。 * 结果为:2020-12-28 15:39:37 */ String formatOne = of.format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")); System.out.println(formatOne); /** * 获取当前时间的年月日 时分秒,例如:2020-12-28 15:39:37 */ DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String format1 = dateTimeFormatter1.format(LocalDateTime.now()); System.out.println(format1); /** * 获取当前时间的年月日,例如:2020-12-28 */ DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String format2 = dateTimeFormatter2.format(LocalDateTime.now()); System.out.println(format2); /** * 获取当前时间的时分秒,例如:15:39:37 */ DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofPattern("HH:mm:ss"); String format3 = dateTimeFormatter3.format(LocalDateTime.now()); System.out.println(format3); /** * 获取当前时间的年月日 时分秒(无符号),例如:20201228153937 */ DateTimeFormatter dateTimeFormatter4 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); String format4 = dateTimeFormatter4.format(LocalDateTime.now()); System.out.println(format4); /** * 获取当前时间的年月日(无符号),例如:20201228 */ DateTimeFormatter dateTimeFormatter5 = DateTimeFormatter.ofPattern("yyyyMMdd"); String format5 = dateTimeFormatter5.format(LocalDateTime.now()); System.out.println(format5); /** * 获取当前时间三天后的日期,例如:2020-12-31T15:39:37.807 * 这里的ChronoUnit.DAYS是时间单位,可以是WEEKS、MONTHS、YEARS */ LocalDateTime plus = LocalDateTime.now().plus(3, ChronoUnit.DAYS); System.out.println(plus); /** * 获取当前时间三天前的日期,例如:2020-12-25T15:39:37.807 * 这里的ChronoUnit.DAYS是时间单位,可以是WEEKS、MONTHS、YEARS */ LocalDateTime plus1 = LocalDateTime.now().minus(3, ChronoUnit.DAYS); System.out.println(plus1); /** * 获取指定时间当年的最后一天,例如:2020-12-31 23:59:59 */ String format6 = dateTimeFormatter1.format(LocalDateTime.now().with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59)); System.out.println(format6); /** * 获取指定时间当年的第一天,例如:2020-01-01 00:00:00 */ String format7 = dateTimeFormatter1.format(LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear()).withHour(00).withMinute(00).withSecond(00)); System.out.println(format7); String format8 = dateTimeFormatter1.format(LocalDateTime.now().withDayOfYear(1).withHour(00).withMinute(00).withSecond(00)); System.out.println(format8); /** * 获取指定时间的前三天,例如:2020-12-25 */ LocalDate minus = LocalDate.now().minus(3, ChronoUnit.DAYS); System.out.println(minus); LocalDate localDate = LocalDate.now().mi 1044 nusDays(3); System.out.println(localDate); LocalDateTime minus1 = LocalDateTime.now().minus(3, ChronoUnit.DAYS); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String format9 = minus1.format(dateTimeFormatter); System.out.println(format9); /** * 获取指定时间的后三天,例如:2020-12-31 */ LocalDate plus2 = LocalDate.now().plus(3, ChronoUnit.DAYS); System.out.println(plus2); LocalDate localDate1 = LocalDate.now().plusDays(3); System.out.println(localDate1); LocalDateTime plus3 = LocalDateTime.now().plus(3, ChronoUnit.DAYS); DateTimeFormatter dateTimeFormatter6 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String format10 = plus3.format(dateTimeFormatter6); System.out.println(format10); } }
相关文章推荐
- java获得系统当前时间三种方式及日期格式之间的相互转化
- (转)---C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
- SpringMVC日期时间格式化方式
- 利用ADO方式向Oracle 数据库中插入当前日期时间
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- SQL 10 函数 3 日期时间函数 - 2 主流数据库系统中日期时间类型的表示方式
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- 取日期与当前时间差的日期显示方式
- C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
- 帮助类解决日期时间问题(包含从Mysql中查出来的数据后面多了个0的问题,以友好的方式显示时间的问题)
- C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
- 获取当前日期、时间的方式
- 在终端里按你的方式显示日期和时间 | Linux 中国
- 几种在java中获取日期及时间方式
- Java基础编程-JDK8新增日期时间API
- C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
- Jdk8 日期和时间处理类
- 【Java 1】时间日期格式配置-----三种时间注入方式
- java时间-计算当前日期推前,延后的方式
- 两种方式使用android时间和日期控件