java 常用类库:时间类LocalDate;LocalTime;LocalDateTime;Calendar 类;Date ;

LocalDate类

LocalDate类代表不带时区的日期,列入2020-12-20。该类提供了静态的now()方法来获取当前的日期。这个类是线程安全的。

LocalTime类

代表不带时区的时间,例如10:20:30。该类提供了静态的now()方法来获取来获取当前的时间。这个类是线程安全的。

LocalDateTime类

LocalDateTime类代表不带时区的日期,时间,列入2020-12-20T10:15:15。该类提供了静态的now方法来获取对应的时间日期。这个类是线程安全的。

代码示例:

package com.zmd.common_class_libraries;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * @ClassName LocalDateTime
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/4/7.
 */
public class LocalDateTimeExample {
    public static void main(String[] args) {
        //当前日期
        LocalDate localDate = LocalDate.now();
        System.out.println(localDate); //2021-04-07
        //指定日期:某年的第多少天
        LocalDate localDate1 = LocalDate.ofYearDay(2021,365);
        System.out.println(localDate1);//2021-12-31
        //获取指定年月日时间
        LocalDate localDate2 = LocalDate.of(2021,5,1);
        System.out.println(localDate2); //2021-05-01

        //当前时间
        LocalTime localTime = LocalTime.now();
        System.out.println(localTime);
        //指定时间
        localTime = LocalTime.of(22,0,0,0);
        System.out.println(localTime);
        //一天中的第多少秒
        localTime = LocalTime.ofSecondOfDay(86399);
        System.out.println(localTime); //23:59:59

        //日期时间LocalDateTime类:
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime); //2021-04-07T22:22:16.560556800
        //时间加减,不改变对象自身,需要获取返回值
        LocalDateTime localDateTime1 = localDateTime.plusHours(5).plusMinutes(3);
        System.out.println(localDateTime1);  //2021-04-08T03:25:16.560556800
    }
}

 

Calendar 类

实例创建方法Calendar.getInstance();

实例方法

getTime() 获取时间戳;

add()时间计算;

roll()时间计算超出范围走默认值;

getActualMaximum; getActualMinimum获取最大最小值

package com.zmd.common_class_libraries;

import com.sun.jdi.PathSearchingVirtualMachine;

import java.util.Calendar;

/**
 * @ClassName CalendarExample
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/4/7.
 */
public class CalendarExample {
    public static void main(String[] args) {
        //Calendar 类为抽象类,不可以new 需要使用静态方法getInstance返回实例
        Calendar calendar = Calendar.getInstance();
        //获取当前日期
        System.out.println(calendar.getTime());
        //日期计算,改变对象本身
        calendar.add(Calendar.DATE, -1);
        System.out.println(calendar.getTime());
        //获取时间对应的年、月、本月第几天、是当天第几个小时
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MONTH));
        System.out.println(calendar.get(Calendar.DATE));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
        //获取指定字段的最大值最小值:月份0~11
        System.out.println(calendar.getActualMaximum(Calendar.MONTH));
        System.out.println(calendar.getActualMinimum(Calendar.MONTH));

        //日期计算roll和add一样,但是超出当天或者当年月时间不会向上进位
        calendar.add(Calendar.DAY_OF_MONTH,26);
        System.out.println(calendar.getTime());
        
    }
}

set

设置对应年月字段

        // set设置月份默认超出对应合理范围会自动进位
        calendar.set(Calendar.MONTH,20); //设置20月,会自动进位到次年
        System.out.println(calendar.getTime()); //Tue Sep 06 18:19:24 CST 2022

关闭容错

        //配置不允许自动容错
        calendar.setLenient(false);
        calendar.set(Calendar.MONTH,20); //关闭进位,再设置20月,抛出异常 //Exception in thread "main" java.lang.IllegalArgumentException: MONTH
        System.out.println(calendar.getTime());

Calendar set方法的延迟修改策略

当执行set()方法设置时间对象更改某个字段后,并没有马上对原有实例修改,而是在下一次调用get、getTime、或者getTimeMillis方法的时候才做update更新修改后的时间。

set(int field, int value)的方法是将指定的字段修改为value,它的实现原理,其实是将Calendar类的isSet变量对应的字段设置为了true,来存储某个字段是否被设置过。在用一个isTimeSet字段来存放我们的时间应不应该要修改?

 

 

 然后,我们再调用,get, getTime或者getTimeInMillis方法的时候,判断如果isTimeSet为false,会重新计算时间。

这样做的好处是什么?比如,我们set了100次,之后,我们突然get了一次,这个时候,我们就仅仅在get的时候才计算了一下时间(1次)。如果不这样做,每次set的时候,就应该计算时间(100次),这样就节约了我们的资源

 

---------------------------------------------------------------

Date类 已过时

构造时间对象

当前时间Date()

指定时间Date(毫秒时间戳)

方法:

getTime() 时间对象的时间戳,默认传入的是System.currentTimeMillis()

setTime(long time) 设置时间对象的时间戳

before/after 判断传入的时间是否在本时间实例的前或后。

package com.zmd.common_class_libraries;

import java.util.Date;

/**
 * @ClassName DateTimeExample
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/4/7.
 */
public class DateTimeExample {
    public static void main(String[] args) {
        //当前时间戳毫秒数
        System.out.println(System.currentTimeMillis());
        //Date()获取当前时间
        Date nowDate = new Date();
        System.out.println(nowDate);

        //判断时间对象是否在指定时间之后
        Date when = new Date(System.currentTimeMillis() - 7200 * 1000);
        System.out.println(when);
        System.out.println(nowDate.after(when));;
        //判断时间对象是否在指定时间之前
        System.out.println(nowDate.before(when));;
        //通过时间对象获取时间对象的时间戳
        System.out.println(nowDate.getTime());
        //对比测试
        System.out.println(System.currentTimeMillis());

        //设置时间戳,比如设置24小时之后的
        nowDate.setTime(System.currentTimeMillis() + 24 * 3600 * 1000);
        System.out.println(nowDate);
    }
}

 

posted on 2021-04-07 19:48  zhangmingda  阅读(400)  评论(0编辑  收藏  举报

导航