JDK8新特性-日期时间

为什么要引入新的日期时间
  • 日期类不提供国际化,没有时区支持,虽然Java引入java.util.Calendar和java.util.TimeZone类,但是问题没有得到解决。
  • java.util.Date 是线程不安全的,所有的日期类都是可变的。
  • java.util.Date包含日期和时间,java.sql.Date只包含日期,再加上名字相同,最关键的是用于格式化和解析的类在java.text包中,设计糟糕。
常用类

LocalDate:不包含具体时间的日期。
LocalTime:不含日期的时间。
LocalDateTime:包含了日期及时间。

LocalDate获取日期时间的信息
LocalDate nowDate = LocalDate.now();
System.out.println("今天的日期:" + nowDate);//今天的日期:2019-09-24

// 年月日
int year = nowDate.getYear();//年:获取年
System.out.println("year:" + year);//year:2019
int month = nowDate.getMonthValue();//月:获取月
System.out.println("month:" + month);//month:9
int day = nowDate.getDayOfMonth();//日:当月的第几天,
System.out.println("day:" + day);//day:24

// 当年的第几天
int dayOfYear = nowDate.getDayOfYear();//日:当年的第几天
System.out.println("dayOfYear:" + dayOfYear);//dayOfYear:267        

//星期
System.out.println(nowDate.getDayOfWeek());//THURSDAY
System.out.println(nowDate.getDayOfWeek().getValue());//2

//月份
System.out.println(nowDate.getMonth());//SEPTEMBER
System.out.println(nowDate.getMonth().getValue());//9
LocalTime获取时间信息
LocalTime nowTime = LocalTime.now();
System.out.println("今天的时间:" + nowTime);//今天的时间:17:08:50.020
int hour = nowTime.getHour();//时
System.out.println("时:" + hour);//时:17
int minute = nowTime.getMinute();//分
System.out.println("分:" + minute);//分:8
int second = nowTime.getSecond();//秒
System.out.println("秒:" + second);//秒:50
int nano = nowTime.getNano();//纳秒
System.out.println("纳秒:" + nano);//纳秒:20000000
LocalDateTime获取日期时间信息

参考前两个类

LocalDate获取指定的日期
LocalDate.of(1992, 11, 12);//直接传入对应的年月日
LocalDate birDay = LocalDate.of(1992, 11, 12);
LocalDate.ofYearDay(1992, birDay.getDayOfYear());
LocalDate.parse("1991-11-11");
LocalDate.parse("19911111",DateTimeFormatter.ofPattern("yyyyMMdd")));
...
LocalTime获取指定时间
LocalTime.of(8, 20);//时,分
LocalTime.of(8, 20, 30))//时,分,秒
LocalTime.of(8, 20, 30, 150);//时,分,秒,纳秒
...
LocalDateTime获取日期时间

参考前两个类

日期时间的比较
boolean isAfter(ChronoLocalDate other) 
boolean isBefore(ChronoLocalDate other)
boolean isEqual(ChronoLocalDate other) 
修改日期时间

LocalDate nowDate = LocalDate.now();
nowDate.minusYears(1);//减一年,也就是一年前
nowDate.plusYears(1);//加一年,就是一年后
年月日时分秒纳秒的加减都是使用minus+Xxx()或者plus+Xxx();
或者
nowDate.minus(1, ChronoUnit.YEARS),
nowDate.plus(1, ChronoUnit.YEARS);
ChronoUnit是枚举。

算时间差

需要用到java.time.Period类
java.time.Duration
java.time.temporal.ChronoUnit

Period period = Period.between(被减数, 减数);
period.getYears();// 1
period.getMonths();//2
period.getDays();//1
时间戳
// 方式一
Instant instant = Instant.now();
//方式二 pre jdk8
Date date = new Date();
date.toInstant();
日期时间格式化

值得注意的是,DateTimeFormatter是线程安全的日期与时间格式器,并且日期调用格式器,或者格式器调用日期,都可以。

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);//2018-09-06T18:22:47.366
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
**String str1 = ldt.format(dtf);**
System.out.println(str)1;//2018-09-06 18:22:47
**String str2 = dtf.format(ldt);**
System.out.println(str2);//2018-09-06 18:22:47
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值