java时间类

calendar

包路径:java.util包下

        /**
         * TimeZone:
         * 表示时区偏移量,如 中国/重庆(Asia/Chongqing) 等等。
         * 注:GMT+08:00 为中国所在时区(东八区)
         */
        // 如果输入不存在的,默认以GMT(格林尼治标准时间,世界标准时间)
        TimeZone.getTimeZone("GMT").getDisplayName();
        // 中国标准时间
        TimeZone.getTimeZone("Asia/Chongqing").getDisplayName();
        // 香港时间
        TimeZone.getTimeZone("Asia/Hong_Kong").getDisplayName();
        /**
         * Locale:
         * 表示语言环境,如 中国China、SIMPLIFIED_CHINESE(简体中文),  加拿大(Canada),美国(US),英国(UK)。
         */
        // 构造参数意思: zh: 语言, CN: 国家
        Locale zh = new Locale("zh", "CN");
        /**
         * Calendar: 线程不安全 默认以(周日 1)为一周的起始
         * 常量:
         * Calendar.YEAR: 表示年   Calendar.MONTH: 表示月     Calendar.DATE: 表示当月中的天数
         * Calendar.DAY_OF_WEEK_IN_MONTH: 表示当月中的第几周   Calendar.DAY_OF_WEEK: 表示周中的第几天
         *
         *
         */
        Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), zh);
        Calendar calendar1 = Calendar.getInstance();
        // 2019-04-16 12:00:15
        calendar1.set(2019, Calendar.MAY, 16, 12, 0, 15);
        // 当前时间
        Date time = calendar.getTime();
        // 设置一周的起始为周一
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        // 获取一周的起始 周日(1) 周一(2)
        int firstDayOfWeek = calendar.getFirstDayOfWeek();
        // calendar1在calendar之前返回true
        boolean before = calendar.before(calendar1);
        // calendar1在calendar之后返回true
        boolean after = calendar.after(calendar1);
        // 当前时间加1天
        calendar.add(Calendar.DATE, 1);
        

LocalDate: JDK.1.8 新增

包路径: java.time

		/**
         * ZoneId:
         * 表示时区, 如: 亚洲/重庆(Asia/Chongqing), 亚洲/上海(Asia/Shanghai)
         */
        ZoneId of = ZoneId.of("Asia/Shanghai");
        /**
         * Clock:
         * 该类提供了访问当前日期和时间的方法,Clock是时区敏感的,
         * 可以用来取代 System.currentTimeMillis() 来获取当前的毫秒数
         */
        Clock clock = Clock.systemDefaultZone();
        // 毫秒数
        long millis = clock.millis();
        /**
         * DateTimeFormatter: 时间格式化常量
         * DateTimeFormatter.ofPattern("yyyy-MM-dd") 自定义格式化
         * y: 年
         * M: 5     MM: 05     MMM:Jul      MMMM:July
         * D: 一年中的第几天
         * d: 3     dd: 03
         * Q/q: 每年的季度
         * a: 上午/下午(注:只有LocalDateTime和LocalTime可以获得)
         */
        /**
         * 注: LocalDate、LocalDateTime等所有类都实现了Temporal接口
         * Duration、Period、ChronoPeriodImpl等类都实现了TemporalAmount接口
         */
        /**
         * ChronoUnit:  该枚举类实现了TemporalUnit接口, 用于日期的单位
         * 时间单位枚举类,计算日期相隔天数等   可以获取所有时间类型的差
         * 注: 扩展ChronoField(实现了TemporalField接口,用于时间的单位)
         */
        LocalDate now = LocalDate.now();
        // 开始-结束  相差多少天(如果参数1(开始时间)大参数2(结束时间)之后,那么返回值为负数)
        long between = ChronoUnit.DAYS.between(LocalDate.parse("2019-04-11"), now);
        System.out.println(between);
        /**
         * Period: 只适用于包含年月日的LocalDate等
         * 开始-结束  年月日相差。
         * Period 类表示一段时间的年、月、日,开使用between()方法获取两个日期之间的差作为Period 对象返回
         */
        LocalDate birthday = LocalDate.parse("1995-05-19");
        Period period = Period.between(birthday, now);
        String.format("相差:%1$d年-%2$d月-%3$d日", period.getYears(), period.getMonths(), period.getDays());
        /**
         * Duration(秒、纳秒): 只适用于包含时间的LocalDateTime、DateTime等
         * 开始-结束  时间差。(如果参数1在参数2之前,返回正数,否则返回负数)
         */
        Duration duration = Duration.between(LocalTime.of(17,21 , 0), LocalTime.now());
        String.format("相差:%1$d秒", duration.getSeconds());
        /**
         * LocalDate:
         * 表示一个具体的日期,但不包含具体时间,也不包含时区信息。 parse()默认以yyyy-MM-dd解析
         */
        // 增加1天
        LocalDate plus = now.plus(1, ChronoUnit.DAYS);
        // 减1天
        now.minus(1, ChronoUnit.DAYS);
        // 是否为闰年(true)
        boolean leapYear = now.isLeapYear();
        // 当前月总天数
        int i = now.lengthOfMonth();
        /**
         * DayOfWeek:
         * 周常量类, MONDAY(周一) TUESDAY(周二) WEDNESDAY(周三) THURSDAY(周四) FRIDAY(周五) SATURDAY(周六) SUNDAY(周日)
         */
        // 本周周几
        DayOfWeek dayOfWeek = now.getDayOfWeek();
        /**
         * LocalTime:
         * 表示一个具体的时间,但不包含日期。
         */
        LocalTime time = LocalTime.of(12, 1, 15);
        /**
         * ChronoField:
         * 时间单位枚举。
         */
        // 支持指定类型枚举(true): 枚举(表示相对于分的秒数)
        boolean supported = time.isSupported(ChronoField.SECOND_OF_MINUTE);
        // 相对于天过去了多少秒
        time.getLong(ChronoField.SECOND_OF_DAY);
        // 相对于分过去了多少秒
        time.getLong(ChronoField.SECOND_OF_MINUTE);
        // 调整参数对象的时间与调用方相同.(也就是把time的时间赋给参数)
        Temporal temporal = time.adjustInto(LocalDateTime.now());
        /**
         * TemporalAdjusters:
         * 提供日期获取的静态工具类。 如: 找到本月第一天, 找到下个月的第一天等等。
         */
        // 获取指定月的第一天
        Temporal temporal1 = TemporalAdjusters.firstDayOfMonth().adjustInto(now);
        // 推荐使用这种
        LocalDate monthOfFirstDay = now.with(TemporalAdjusters.firstDayOfMonth());
        // 增加一小时
        LocalTime plus1 = time.plus(Duration.ofHours(1));
        /**
         * LocalDateTime:
         * 就是LocalDate与LocalTime的结合
         */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值