java8之前,我对于java提供的时间工具类,觉得很麻烦。因此我偏向使用appache或者google提供的一些工具包。但java8,为我们重新提供时间工具类。这次所提供的类都在Time包中,而这其中最值得的我们去了解的类有五个。
- Instant 它代表的是时间戳,比如2014-01-14T02:20:13.592Z,这可以从java.time.Clock类中获取,像这样:
Instant current = Clock.system(ZoneId.of(“Asia/Tokyo”)).instant();
- LocalDate 它表示的是不带时间的日期,比如2014-01-14。它可以用来存储生日,周年纪念日,入职日期等。
- LocalTime – 它表示的是不带日期的时间
- LocalDateTime – 它包含了时间与日期,不过没有带时区的偏移量
- ZonedDateTime – 这是一个带时区的完整时间,它根据UTC/格林威治时间来进行时区调整
注:这次新的日期和时间工具类都不可变的也是线程安全的。
代码就是最好的文档,具体使用如下
// 获取当前日期
LocalDate ld = LocalDate.now();
System.out.println(ld);
// 输出结果:2017-03-20
// 获取当前的年月日
int year = ld.getYear();
int month = ld.getMonthValue();
int day = ld.getDayOfMonth();
System.out.println("年:" + year + "月:" + month + "日:" + day);
// 输出结果:年:2017月:3日:20
// 获取指定日期
LocalDate lcl = LocalDate.of(2020, 2, 5);
System.out.println(lcl);
// 输出结果:2020-02-05 ,这比我们自己拼接字符串可太爽了^_^
// 获取指定时间,具体到毫秒
LocalDateTime lct = LocalDateTime.now();
System.out.println(lct);
// 输出结果:2017-03-20T15:38:32.264
// 指定具体时间
LocalDateTime lct1 = LocalDateTime.of(1998, 3, 4, 14, 33);
System.out.println(lct1);
// 输出结果:1998-03-04T14:33
// 判断两个日期是否相等
LocalDate lld1 = LocalDate.now();
LocalDate lld2 = LocalDate.of(2017, 3, 20);
if (lld1.equals(lld2)) {
System.out.println("日期相等");
}
// 输出结果:日期相等
// 判断是不是生日,比如以我的生日举例声明
LocalDate ldt = LocalDate.of(1994, 10, 07);
LocalDate ldt1 = LocalDate.of(2020, 10, 07);
MonthDay md = MonthDay.of(ldt.getMonth(), ldt.getDayOfMonth());
MonthDay md1 = MonthDay.of(ldt1.getMonth(), ldt1.getDayOfMonth());
if (md.equals(md1)) {
System.out.println("zhaotong 生日快乐");
}
// 输出结果:zhaotong 生日快乐
// 从当前时间,向前或向后扩展
LocalDate lde = LocalDate.now();
LocalDate lde1 = lde.plusDays(5);// 向后数五天
System.out.println(lde1);// 2017-03-25
LocalDate lde2 = lde.minusDays(5);// 向前数五天
System.out.println(lde2);// 2017-03-15
LocalDate lde3 = lde.minusWeeks(2);// 向前数两周
System.out.println(lde3);// 2017-03-06
// LocalDateTime 也拥有这些扩展函数,这里就不在一一说明了
// java 8中的时钟
Clock clock = Clock.systemUTC();
Clock clock1 = Clock.systemDefaultZone();
System.out.println(clock);
System.out.println(clock1);
// 输出结果:SystemClock[Z],SystemClock[Asia/Shanghai]
// 判断一个日期是在另一个日期前面还是后面
LocalDate today = LocalDate.now();
LocalDate tomorrow = LocalDate.of(2017, 3, 21);
if (today.isBefore(tomorrow)) {
System.out.println(true);
}
if (tomorrow.isAfter(today)) {
System.out.println(true);
}
// java8 中处理不同的时区
LocalDateTime ldtc = LocalDateTime.now();
ZonedDateTime ldtczone = ZonedDateTime.of(ldtc,
ZoneId.of("America/New_York"));
System.out.println(ldtczone);
// 输出:2017-03-20T17:35:56.257-04:00[America/New_York]
// java中如何表示固定的日期
YearMonth ym = YearMonth.of(2008, Month.FEBRUARY);
System.out.println(ym.lengthOfMonth());// 2008年的2月是29天
// 判断是否为闰年
LocalDate date = LocalDate.now();
if (date.isLeapYear()) {
System.out.println(date + ":" + "是闰年");
}
// 获取两个日期之间的数据
LocalDate date1 = LocalDate.of(2000, 10, 07);
Period per = Period.between(date1, date);
System.out.println("days:" + per.getDays());
System.out.println("years:" + per.getYears());
System.out.println("months:" + per.getMonths());
// days:13
// years:16
// months:5
// 相差16年,5个月,13天
// java 8获取当前时间戳
Instant is = Instant.now();
System.out.println(is);
// 输出:2017-03-20T09:53:59.433Z
// 格式化输出日期
String goodFriday = "1994-10-07";
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate holiday = LocalDate.parse(goodFriday, formatter);
System.out.println(holiday);
} catch (DateTimeParseException ex) {
ex.printStackTrace();
}
//将日期格式化,转化成字符串
LocalDateTime ldtt=LocalDateTime.now();
DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:a");
String str=ldtt.format(format);
System.out.println(str);
//输出结果:2017-03-20 06:03:下午