基于Java8的日期和事件API

时间线

Java的Date和Time的API都具有以下规范
1、每天86400秒
2、每天正午进行时间精准匹配;
3、其他时间进行接近匹配;
因此Java的时间api能符合官方时间的变化;

Instant类提供了时间的计数;其可以充当时间戳,可以使用其方法比较两个对象,比如isAfter、isBefore判断前后关系;
为了得出时间差,引入了Duration静态类的between方法;然后使用Duration类的getSeconds、toDay、toMinutes、toHours等方法得到自己所需要的值;
可以这样理解,Instant记录了时刻,而Duration用于表示时间长度;

public class TimeTest {
    public static void main(String[] args) {
        
        Instant start = Instant.now();
        //运行程序
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        Instant end = Instant.now();
        System.out.println(start.isAfter(end));//false

        Instant min = Instant.MIN;//1970年1月1日
        //使用duration进行扩展操作
        Duration duration = Duration.between(start, end);
        System.out.println(duration.getSeconds());//3
        Duration duration2 = Duration.between(min, end);
        System.out.println(duration2.toDays());//365243238465
    }
}

日期线

本地日期LocalDate

LocalDate是java中的日期对象类,可以使用它来表示带有年月日的日期,构建对象依然可以使用LocalDate的now或of静态方法的形式;
如果需要只表示月和日,可以使用MonthDay类,或者只用年和月使用YearMonth等;

public class DateTest {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate bir = LocalDate.of(2000, Month.JUNE,6);
        //可以使用方法计算之后多少天是那个日子;
        LocalDate program = LocalDate.of(2021,1,1).plusDays(255);//计算了2021年的第255天

        System.out.println("当天是星期"+program.getDayOfWeek().getValue());//获取当天周几
        boolean leapYear = program.isLeapYear();//判断是不是闰年
    }
}

日期调整器TemporalAdjuster

有时候需要做一些特殊的计算,比如计算当11月的第四个星期五
java中提供了TemporalAdjuster类作为特殊日期管理,提供了很多静态方法;
可以使用TemporalAdjuster类来作为一个规则应用于日期得到结果;

public class TemporalAdjustTest {
    public static void main(String[] args) {
        LocalDate now = LocalDate.of(2021,11,1);
        TemporalAdjuster temporalAdjuster = TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY);

        System.out.println(temporalAdjuster.adjustInto(now));//2021.11.26
    }
}

本地时间

LocalTime和LocalDateTime用于表示时间日期;

public class LocalDateTimeTest {
    public static void main(String[] args) {
        LocalDateTime local = LocalDateTime.now();
        System.out.println(local);
        System.out.println(local.getHour());
    }
}

时区时间

Java中使用了IANA的数据库所记录的时区编码ID,通过传入参数实现不同时区的时间表达,ZonedDateTime表示时区时间,参数的最后一位为时区id

        ZonedDateTime zonedDateTime = ZonedDateTime.of(local, ZoneId.of("Asia/Shanghai"));
        System.out.println(zonedDateTime);
    

日期格式化

使用格式器DateTimeFormater来格式化时间的输出与输入;

        LocalDateTime time = LocalDateTime.now();
        //系统格式器
        DateTimeFormatter isoLocalDateTime = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        //自定义格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        //格式输出
        formatter.format(time);
        //格式输入
        formatter.parse("2020-01-02");
        

与遗留类的转化

基本是toxxx类方法或者from(xx);进行转化;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值