Java8日期处理

简介

伴随 lambda表达式streams 以及一系列小优化,Java8 推出了全新的日期时间API。
Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。 然后就在 java8 上面增加新的特性。

全新API的众多好处之一就是,明确了日期时间概念,例如:瞬时(instant)长短(duration)日期时间时区周期

新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全。

编号 类的名称 描述
1 Instant 时间戳
2 Duration 持续时间,时间差
3 LocalDate 只包含日期,比如:2020-01-15
4 LocalTime 只包含时间,比如:23:12:10
5 LocalDateTime 包含日期和时间,比如:2020-01-15 23:14:21
6 Period 时间段
7 ZoneOffset 时区偏移量,比如:+8:00
8 ZonedDateTime 带时区的时间
9 Clock 时钟,比如获取目前美国纽约的时间

关键类

  • Instant:瞬时实例。
  • LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。
  • LocalTime:本地时间,不包含日期。
  • LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
  • ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

实际使用

获取当前日期

Java 8 中的 LocalDate 用于表示当天日期。和 java.util.Date不同,它只有日期,不包含时间。当你仅需要表示日期时就用这个类。

LocalDate today = LocalDate.now();

获取年、月、日信息

//获取年、月、日信息
public void getDetailDate(){
   
    LocalDate today = LocalDate.now();
    int year = today.getYear();
    int month = today.getMonthValue();
    int day = today.getDayOfMonth();
        
    System.out.printf("Year : %d  Month : %d  day : %d t %n", year, month, day);
}

处理特定日期

通过静态工厂方法**now()**非常容易地创建了当天日期。

还可以调用另一个有用的工厂方法 LocalDate.of() 创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例**。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从 0 开始等等。日期所见即所得。

//处理特定日期
public void handleSpecilDate(){
   
    LocalDate dateOfBirth = LocalDate.of(2018, 01, 21);
    System.out.println("The specil date is : " + dateOfBirth);
}

判断两个日期是否相等

LocalDate 重载了equal方法

注意,如果比较的日期是字符型的,需要先解析成日期对象再作判断。

//判断两个日期是否相等
public void compareDate(){
   
    LocalDate today = LocalDate.now();
    LocalDate date1 = LocalDate.of(2018, 01, 21);
        
    if(date1.equals(today)){
   
           System.out.printf("TODAY %s and DATE1 %s are same date %n", today, date1);
    }
}

检查像生日这种周期性事件

Java 中另一个日期时间的处理就是检查类似生日、纪念日、法定假日(国庆以及春节)、或者每个月固定时间发送邮件给客户 这些周期性事件。

Java中检查这些节日或其它周期性事件是使用MonthDay类。这个类组合了月份和日,去掉了年,这意味着可以用它判断每年都会发生事件。

和这个类相似的还有一个YearMonth类。这些类也都是不可变并且线程安全的值类型。

//处理周期性的日期
public void cycleDate(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值