java.util.Date和java.util.Calendar易用性差,不支持时区,不是线程安全的。Java8增加了新的日期和时间类:LocalDate、LocalTime、Instant、Duration 以及 Period,这些类都包含在 java.time包中。新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全。
Java8提供的日期时间类
- LocalDate 日期,格式为:yyyy-MM-dd
- LocalTime 时间,格式为:HH:mm:ss SSS
- LocalDateTime 日期时间,格式为:yyyy-MM-ddTHH:mm:ss SSS ,是前2者的结合
- Instant 时间戳
- Duration 持续时间,时间差
- Period 时间段
- ZoneOffset 时区偏移量,比如:+8:00
- ZonedDateTime 带时区的时间
- Clock 时钟,比如获取目前美国纽约的时间
- java.time.format.DateTimeFormatter 时间格式化
参考示例
public static void test1(){
//日期
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
System.out.println(localDate.plusDays(1)); //+1天
System.out.println(localDate.minusDays(1)); //-1天
String currDate=DateTimeFormatter.ofPattern("yyyy-MM-dd").format(localDate);
System.out.println(currDate);
//时间
LocalTime localTime = LocalTime.now(); //当前 日期时间
System.out.println(localTime.getHour()); //当前 小时
System.out.println(localTime.plusHours(1)); //+1小时
//日期+时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
//自定义日期
LocalDate date = LocalDate.of(2018,2,6);
System.out.println("自定义日期:"+date);
//判断日期是否相等
LocalDate date1 = LocalDate.now();
LocalDate date2 = LocalDate.of(2018,2,5);
if(date1.equals(date2)){
System.out.println("时间相等");
}else{
System.out.println("时间不等");
}
//计算一周后日期
LocalDate today = LocalDate.now();
System.out.println("今天的日期为:"+today);
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
System.out.println("一周后的日期为:"+nextWeek);
//判断日期范围
LocalDate tomorrow = LocalDate.of(2018,2,6);
if(tomorrow.isAfter(today)){
System.out.println("之后的日期:"+tomorrow);
}
LocalDate yesterday = today.minus(1, ChronoUnit.DAYS);
if(yesterday.isBefore(today)){
System.out.println("之前的日期:"+yesterday);
}
//日期格式化
String dayAfterTommorrow = "20180205";
LocalDate formatted = LocalDate.parse(dayAfterTommorrow,DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(dayAfterTommorrow+" 格式化后的日期为: "+formatted);
//字符串、日期 互转
LocalDateTime dateTime1 = LocalDateTime.now();
DateTimeFormatter format1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
//日期转字符串
String str = dateTime1.format(format1);
System.out.println("日期转换为字符串:"+str);
DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
//字符串转日期
LocalDate dateTime2 = LocalDate.parse(str,format2);
System.out.println("日期类型:"+dateTime2);
}
https://blog.oxings.com/article/42.html