简介
java中引用的包 import java.time.LocalDate
属性 | 功能 |
---|---|
Instant | 代表的是时间戳 |
LocalDate | 不包含具体时间的日期 |
LocalTime | 不含日期的时间 |
LocalDateTime | 包含了日期及时间 |
1.获取日期时间
1.LocalDate 获取日期
LocalDate nowDate = LocalDate.now(); //今天的日期
int year = nowDate.getYear(); //年:一般用这个方法获取年
int month = nowDate.getMonthValue(); //月:一般用这个方法获取月
int day = nowDate.getDayOfMonth(); //日:当月的第几天,一般用这个方法获取日
int dayOfYear = nowDate.getDayOfYear(); //日:当年的第几天
//星期
System.out.println(nowDate.getDayOfWeek()); //默认是日期英文表示
System.out.println(nowDate.getDayOfWeek().getValue()); //日期阿拉伯数字表示
//月份
System.out.println(nowDate.getMonth()); //默认是日期英文表示
System.out.println(nowDate.getMonth().getValue()); //日期阿拉伯数字表示
2.LocalTime 获取时间
LocalTime nowTime = LocalTime.now(); //当前时间
int hour = nowTime.getHour(); //时
int minute = nowTime.getMinute(); //分
int second = nowTime.getSecond(); //秒
int nano = nowTime.getNano(); //纳秒
3.LocalDateTime 获取日期时间
LocalDateTime nowDateTime = LocalDateTime.now(); //当前日期时间:2021-01-25T16:11:34.741
System.out.println(nowDateTime.getYear());//年
System.out.println(nowDateTime.getMonthValue());//月
System.out.println(nowDateTime.getDayOfMonth());//日
System.out.println(nowDateTime.getHour());//时
System.out.println(nowDateTime.getMinute());//分
System.out.println(nowDateTime.getSecond());//秒
System.out.println(nowDateTime.getNano());//纳秒
System.out.println(nowDateTime.getDayOfYear());//日:当年的第几天
//星期
System.out.println(nowDateTime.getDayOfWeek());
System.out.println(nowDateTime.getDayOfWeek().getValue());
//月份
System.out.println(nowDateTime.getMonth());
System.out.println(nowDateTime.getMonth().getValue());
2.获取指定日期时间
1.LocalDate
LocalDate.of(1991, 11, 11);//直接传入对应的年月日
LocalDate.of(1991, Month.NOVEMBER, 11);//相对上面只是把月换成了枚举
LocalDate birDay = LocalDate.of(1991, 11, 11);
LocalDate.ofYearDay(1991, birDay.getDayOfYear());//第一个参数为年,第二个参数为当年的第多少天
LocalDate.ofEpochDay(birDay.toEpochDay());//参数为距离1970-01-01的天数
LocalDate.parse("1991-11-11");
LocalDate.parse("19911111",DateTimeFormatter.ofPattern("yyyyMMdd"));
2.LocalTime
LocalTime.of(8, 20);//时分
LocalTime.of(8, 20, 30);//时分秒
LocalTime.of(8, 20, 30, 150);//时分秒纳秒
LocalTime mTime = LocalTime.of(8, 20, 30, 150);
LocalTime.ofSecondOfDay(mTime.toSecondOfDay());//参数为距离当天零时的秒数
LocalTime.ofNanoOfDay(mTime.toNanoOfDay());//参数为距离当天零时的纳秒数
LocalTime.parse("08:20:30");
LocalTime.parse("082030", DateTimeFormatter.ofPattern("HHmmss"));
3.LocalDateTime
LocalDateTime.of(birDay, mTime);//参数为LocalDate和LocalTime
LocalDateTime.of(1991, 11, 11, 8, 20); //1991-11-11T08:20
LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20);
LocalDateTime.of(1991, 11, 11, 8, 20, 30); //1991-11-11T08:20:30
LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20, 30);
LocalDateTime.of(1991, 11, 11, 8, 20, 30, 150); //1991-11-11T08:20:30.000000150
LocalDateTime.of(1991, Month.NOVEMBER, 11, 8, 20, 30, 150);
LocalDateTime.parse("1991-11-11T08:20:30");
LocalDateTime.parse("1991-11-11 08:20:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
3.日期时间的比较
LocalDate of = LocalDate.of(1994, Month.OCTOBER, 21);
System.out.println(of.equals(LocalDate.now())); //false
System.out.println(of + "指定日期是否在当前日期之前? " + of.isBefore(LocalDate.now())); //true
System.out.println(of+ "指定日期是否在当前日期之后? " + of.isAfter(LocalDate.now())); //false
4.对日期时间的修改
LocalDate nowDate = LocalDate.now(); //当前日期
System.out.println(nowDate.minusYears(1));//一年前
System.out.println(nowDate.minusMonths(1));//一月前
System.out.println(nowDate.minusWeeks(1));//一周前
System.out.println(nowDate.minusDays(1));//一天前
System.out.println(nowDate.plusYears(1));//一年后
System.out.println(nowDate.plusMonths(1));//一月后
System.out.println(nowDate.plusWeeks(1));//一周后
System.out.println(nowDate.plusDays(1));//一天后
LocalTime nowTime = LocalTime.now(); //当前时间
System.out.println(nowTime.minusHours(1));//一小时前
System.out.println(nowTime.minusMinutes(1));//一分钟前
System.out.println(nowTime.minusSeconds(1));//一秒前
System.out.println(nowTime.minusNanos(1));//一纳秒前
System.out.println(nowTime.plusHours(1));//一小时后
System.out.println(nowTime.plusMinutes(1));//一分钟后
System.out.println(nowTime.plusSeconds(1));//一秒后
System.out.println(nowTime.plusNanos(1));//一纳秒后
还可以直接使用 minus 和 plus 方法来增加和减少日期时间。LocalDateTime 、LocalDate 、LocalTime 都是类似的
ChronoUnit 用来表示时间单位, ChronoUnit 后面只需要替换成相应的年、月、周、日、时、分、秒、纳秒,就能减少或增加相应的单位。
例如:System.out.println(nowDate.minus(1, ChronoUnit.YEARS)); //减
System.out.println(nowDate.plus(1, ChronoUnit.YEARS)); //加
4.时间戳
Instant instant = Instant.now();
System.out.println("当前时间戳是:" + instant);//当前时间戳是:2018-09-06T10:14:29.460Z
Date date = Date.from(instant);
System.out.println("当前时间戳是:" + date);//当前时间戳是:Thu Sep 06 18:14:29 CST 2018
instant = date.toInstant();
5.日期时间格式化
在JDK8之前,时间日期的格式化非常麻烦,经常使用SimpleDateFormat来进行格式化,但是SimpleDateFormat并不是线程安全的。在JDK8中,引入了一个全新的线程安全的日期与时间格式器DateTimeFormatter
System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); //将当前日期时间格式化 ,DateTimeFormatter.ofPattern("自定义格式")
6.计算日期时间差
主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算。只能精确到年月日。
LocalDate today = LocalDate.now();
System.out.println(today);//2018-09-06
LocalDate birthDate = LocalDate.of(1992, 1, 11);
System.out.println(birthDate);//1990-10-01
Period period = Period.between(birthDate, today);//第二个参数减第一个参数
System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(), period.getDays());//年龄 : 27 年 11 月 5 日
java.time.Duration
提供了使用基于时间的值测量时间量的方法。
用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
System.out.println(birthDate);
Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数
System.out.println(duration.toDays());//两个时间差的天数
System.out.println(duration.toHours());//两个时间差的小时数
System.out.println(duration.toMinutes());//两个时间差的分钟数
System.out.println(duration.toMillis());//两个时间差的毫秒数
System.out.println(duration.toNanos());//两个时间差的纳秒数
java.time.temporal.ChronoUnit
ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位。
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
System.out.println(birthDate);
System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today));
System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today));
System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today));
System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today));
System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today));
System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today));
System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today));
System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today));
System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today));
System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today));
System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today));
System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today));
System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today));
System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today));
System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));