ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

新的时间处理包java.time

2021-08-04 20:01:53  阅读:141  来源: 互联网

标签:java 处理 LocalDateTime System 2021 time println localDateTime out


木叶飞舞之处,火亦生生不息


java8中定义了新的时间包java.time较于1.8之前的 Date,Calendar ,TimeZone,SimpleDateFormat有了更好的实现方式。

比如新的时间格式不管什么操作都是产生新实例,是线程安全的。

一、包的层级结构

  • java.time:标准的日期和时间的类
  • java.time.chrono:特殊的时间,比如日本的平成,台湾的民国
  • java.time.format:时间格式化
  • java.time.temporal:时间校正器
  • java.time.zone:时区

二、常用方法示例

一、日期

一共有三个常用类LocalDate,LocalTime,LocalDateTime。

其中的方法都是见名知意,可以说是非常好用,下面仅做演示。

    //表示日期的
    LocalDate localDate = LocalDate.now();
    System.out.println("当前日期:" + localDate);
    //表示时间的
    LocalTime localTime = LocalTime.now();
    System.out.println("当前时间:" + localTime);
    //表示日期加时间
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println("当前日期时间:" + localDateTime);
    //获取时间的每个值
    System.out.println("年:" + localDateTime.getYear());
    System.out.println("月:" + localDateTime.getMonthValue());
    System.out.println("日:" + localDateTime.getDayOfMonth());
    System.out.println("时:" + localDateTime.getHour());
    System.out.println("分:" + localDateTime.getMinute());
    System.out.println("秒:" + localDateTime.getSecond());
    //指定时间的创建方式
    LocalDateTime localDateTime1 = LocalDateTime.of(2021, 12, 31, 23, 23, 23);
    System.out.println("自定义日期时间:" + localDateTime1);
    //增加两天
    LocalDateTime localDateTime2 = localDateTime1.plusDays(2);
    System.out.println("自定义日期时间+两天:" + localDateTime2);
	其结果为
	当前日期:2021-08-04
	当前时间:17:05:15.793
	当前日期时间:2021-08-04T17:05:15.793
	年:2021
	月:8
	日:4
	时:17
	分:5
	秒:15
	自定义日期时间:2021-12-31T23:23:23
	自定义日期时间+两天:2022-01-02T23:23:23

二、时间戳

时间戳就是从1970年1月1日0时0分0秒至今计算的毫秒数,使用Instant类。

	//默认获取UTC时间  比东八区早8个小时
    Instant instant = Instant.now();
    System.out.println("默认时间:" + instant);
    Instant now = Instant.now(Clock.systemUTC());
    System.out.println("当前时区时间:" + instant);
    System.out.println("当前时区毫秒:" + now.toEpochMilli());
    System.out.println("当前时区秒:" + now.getEpochSecond());
	其结果为
	默认时间:2021-08-04T09:33:58.596Z
	当前时区时间:2021-08-04T09:33:58.596Z
	当前时区毫秒:1628069638641
	当前时区秒:1628069638

三、获取时间范围

时间范围用Duration或者Period获取,两者的不同是Peirod只接收LocalDate类型的参数而Duration接收的参数要实现Temporal接口。所以Period只能精确到天,Duration能精确到毫秒甚至纳秒。

 	//时间之间间隔的
    LocalDateTime localDateTime1 = LocalDateTime.now();
    Thread.sleep(1000);
    LocalDateTime localDateTime2 = LocalDateTime.now();
    Duration duration = Duration.between(localDateTime1, localDateTime2);
    System.out.println("获取毫秒数" + duration.toMillis());
    //日期之间间隔的
    LocalDate localDate1 = LocalDate.of(2021, 7, 8);
    LocalDate localDate2 = LocalDate.of(2021, 7, 12);
    Period period = Period.between(localDate1, localDate2);
    System.out.println("获取天数" + period.getDays());
	其结果为
	获取毫秒数1009
	获取天数4

四、时间校正器

在temporal包下,有一个类TemporalAdjusters提供了大量的静态方法去修改时间。

 	LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println("当前时间:" + localDateTime);
    //指定天数到下周五
    LocalDateTime localDateTime1 = localDateTime.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
    System.out.println("下周五:" + localDateTime1);
    //指定哪一天
    LocalDateTime localDateTime2 = localDateTime.withDayOfMonth(10);
    System.out.println("指定时间:" + localDateTime2);
    LocalDateTime localDateTime3 = localDateTime.withDayOfYear(300);
    System.out.println("指定时间:" + localDateTime3);
    //自定义  下一个工作日
    LocalDateTime localDateTime4 = localDateTime.with((l) -> {
        LocalDateTime s2 = (LocalDateTime) l;
        DayOfWeek dayOfWeek = s2.getDayOfWeek();
        if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {
            return s2.plusDays(3);
        } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) {
            return s2.plusDays(2);
        } else {
            return s2.plusDays(1);
        }
    });
    System.out.println("下一个工作日:" + localDateTime4);
	其结果为
	当前时间:2021-08-04T19:25:11.288
	下周五:2021-08-06T19:25:11.288
	指定时间:2021-08-10T19:25:11.288
	指定时间:2021-10-27T19:25:11.288
	下一个工作日:2021-08-05T19:25:11.288

五、时间格式化

格式化使用DateTimeFormatter进行,既可以从DateTimeFormatter调用方法,也可以将该类的方法当做参数传入。

    LocalDateTime now = LocalDateTime.now();
    String str = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssSSS"));
    String str1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(now);
    System.out.println(str);
    System.out.println(str1);
    //字符串转时间格式化毫秒值好像必须有.   暂不知道为什么
    LocalDateTime localDateTime = LocalDateTime.parse("20210808121212.111", DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSS"));
    LocalDateTime localDateTime1 = LocalDateTime.from(DateTimeFormatter.ofPattern("yyyyMMddHHmmss").parse("20210808121212"));
    System.out.println(localDateTime);
    System.out.println(localDateTime1);
	其结果为
	2021-08-04 19:50:27102
	2021-08-04 19:50:27
	2021-08-08T12:12:12.111
	2021-08-08T12:12:12

标签:java,处理,LocalDateTime,System,2021,time,println,localDateTime,out
来源: https://blog.csdn.net/weixin_41647415/article/details/119387497

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有