Java 8 的日期时间工具
之前有谈过Java的两套时间工具,分别是 Date日期类型和Calendar日历类型,但仍在开发中存在问题:
- 日历工具获得当月份的时候,与Date一样都是从0开始计数,比如通过get方法获得一月份数值为0;
- 日历工具获得当天是星期几的时候,星期日是排在最前面的,通过get方法获得的星期日数值为1,而星期一数值居然为2;
- 日历工具能够表达的最小世界单位是毫秒,精度不高;
- 日历工具没有提供闰年判断方法;
- 日历工具缺乏自己的格式,还得借助Date类型的格式化工具SimpleDateFormat,才能将日期时间按照指定格式输出为字符串。
- …
为解决以上问题,Java 8 提供了全新的本地日期时间类型,它的成员主要有LocalDate、LocalTime、LocalDateTime等。
1. LocalDate 和 LocalTime
1.1 本地日期类型LocalDate
import java.time.LocalDate;
获得本地日期实例很简单,就直接调用该类型的now方法,顾名思议就是获得当前日期,很符合我们常理,且还额外提供了几个常用的统计方法。
注意:
- getMonth() 返回的是英文月份,而 getMonthValue() 返回的是数字月份!
import java.time.Month;
- getDayOfWeek() 返回的是英文星期,而后面加了getValue() 才返回数字星期几!
import java.time.DayOfWeek;
【代码】
// LocalDate的各种方法
LocalDate date = LocalDate.now();// 获得本地日期的实例
System.out.println("date:" + date.toString());
int year = date.getYear(); // 获得该日期所在的年份
System.out.println("year:" + year);
//注意区分getMonth()返回的是英文月份,而getMonthValue()返回的是数字月份!
int month1 = date.getMonthValue();
Month month2 = date.getMonth();
System.out.println("month:" + month1 + '\t' + month2);
int dayOfYear = date.getDayOfYear();
System.out.println("day:" + dayOfYear);
//注意区分getDayOfWeek()返回的是英文星期,而后面加了getValue()才返回数字星期几!
int dayOfWeek1 = date.getDayOfWeek().getValue();
DayOfWeek dayOfWeek2 = date.getDayOfWeek();
System.out.println("week:" + dayOfWeek1 + '\t' + dayOfWeek2);
int lengthOfYear = date.lengthOfYear();
System.out.println("lengthOfYear:" + lengthOfYear);
int lengthOfMonth = date.lengthOfMonth();
System.out.println("lengthOfMonth:" + lengthOfMonth);
boolean isLeapYear = date.isLeapYear();// 判断该日期所在的年份是否为闰年
System.out.println("isLeapYear:" + isLeapYear);
private static void showLocalDate() {
LocalDate date = LocalDate.now(); // 获得本地日期的实例
System.out.println("date=" + date.toString());
int year = date.getYear(); // 获得该日期所在的年份
System.out.println("year=" + year);
// 获得该日期所在的月份。注意getMonthValue返回的是数字月份,getMonth返回的是英文月份
int month = date.getMonthValue();
System.out.println("month=" + month + ", english month=" + date.getMonth());