一、Date 类(不常用)
代表日期和时间的类
public Date() | 创建一个Date对象,代表的是系统当前此刻日期时间 |
public Date(long time) | 把时间毫秒值转换成Date日期对象 |
public long getTime() | 返回从1970年1月1日 00:00:00 走到此刻的总的毫秒数 |
public void setTime(long time) | 设置日期对象的时间为当前时间毫秒值对应的时间 |
二、SimpleDateFormat 类(不常用)
用于日期格式化
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式(查API) |
public final String format(Date date) | 将日期格式化成日期/时间字符串 |
public final Date parse(String source) | 将字符串解析为日期类型 |
三、Calendar 类(不常用)
代表的是系统此刻时间对应的日历
通过它可以单独获取、修改时间中的年、月、日、时、分、秒等
public int get(int field) | 取日历中的某个字段信息 |
public void set(int field,int value) | 修改日历的某个字段信息 |
public void add(int field,int amount) | 为某个字段增加/减少指定的值 |
// 获取当前时间的日历对象
Calendar c = Calendar.getInstance();
// Calendar 是抽象类
// 通过此方法获取的是子类对象
int y = c.get(Calendar.YEAR);
// 注意Calendar类中的月份是0-11
public final Date getTime() | 获取日期对象 |
public final setTime(Date date) | 给日历设置日期对象 |
四、日历类(JDK8)
LocalDate类:代表本地日期(年、月、日、星期)
LocalTime类:代表本地时间(时、分、秒、纳秒)
LocalDateTime类:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
1、获取对象
public static Xxxx now(): 获取系统当前时间对应的该对象 | LocaDate ld = LocalDate.now(); LocalTime lt = LocalTime.now(); LocalDateTime ldt = LocalDateTime.now(); |
public static Xxxx of(…):获取指定时间的对象 | LocalDate localDate1 = LocalDate.of(2099 , 11,11); LocalTime localTime1 = LocalTime.of(9, 8, 59); LocalDateTime localDateTime1 = LocalDateTime.of(2025, 11, 16, 14, 30, 01); |
2、常用的 get 方法
int getYear() | 获取年份字段 |
Month getMonth() | 使用 Month 枚举获取年份字段 |
int getMonthValue() | 获取1到12之间的月份字段 |
int getDayOfMonth() | 获取日期字段 |
DayOfWeek getDayOfWeek() | 获取星期几字段,即枚举 DayOfWeek |
int getHour() | 获取当日时间字段 |
int getMinute() | 获取分钟字段 |
int getSecond() | 获取第二分钟字段 |
3、常用的 set 方法
withHour、withMinute、withSecond、withNano | 修改时间,返回新时间对象 |
plusHours、plusMinutes、plusSeconds、plusNanos | 把某个信息加多少,返回新时间对象 |
minusHours、minusMinutes、minusSeconds、minusNanos | 把某个信息减多少,返回新时间对象 |
equals、isBefore、isAfter | 判断2个时间对象,是否相等,在前还是在后 |
Tips:LocalDateTime、LocalDate、LocalTime 都是不可变的, 上述方法返回的是一个新的对象
五、日期格式化类(JDK8)
DateTimeFormatter类:用于时间的格式化和解析
1、对象获取
static DateTimeFormatter ofPattern(格式) | 获取格式对象 |
2、格式化
String format(时间对象) | 按照指定方式格式化 |
3、解析(调用的是日历类里的方法)
LocalDateTime.parse("解析字符串", 格式化对象) |
LocalTime.parse("解析字符串", 格式化对象) |
LocalDate.parse("解析字符串", 格式化对象) |
六、时间类(JDK8)
1、Instant 类(时间戳,类似于 Date)
static Instant now() | 获取当前时间的Instant对象(标准时间) |
static Instant ofXxxx(long epochMilli) | 根据(秒/毫秒/纳秒)获取Instant对象 |
ZonedDateTime atZone(ZoneId zone) | 指定时区 |
boolean isXxx(Instant otherInstant) | 判断时间前后的方法 |
Instant minusXxx(long millisToSubtract) | 减少时间系列的方法 |
Instant plusXxx(long millisToSubtract) | 增加时间系列的方法 |
Instant instant = Instant.now();
System.out.println("当前时间戳是:" + instant);
// 获取到的并不是东八区的时间
ZoneId o = ZoneId.of("Asia/Shanghai");
ZonedDateTime zdt = Instant.now().atZone(o);
System.out.println(zdt);
2、ZoneId 类(时区)
static Set<String> getAvailableZoneIds() | 获取Java中支持的所有时区 |
static ZoneId systemDefault() | 获取系统默认时区 |
static ZoneId of(String zoneId) | 获取一个指定时区 |
3、ZoneDateTime 类(带时区的时间对象)
static ZonedDateTime now() | 获取当前时间的ZonedDateTime对象 |
static ZonedDateTime ofXxxx(...) | 获取指定时间的ZonedDateTime对象 |
ZonedDateTime withXxx(时间) | 修改时间系列的方法 |
ZonedDateTime minusXxx(时间) | 减少时间系列的方法 |
ZonedDateTime plusXxx(时间) | 增加时间系列的方法 |
七、工具类(JDK8)
Duration 类:用于计算两个“时间”间隔(秒,纳秒)
Period 类:用于计算两个“日期”间隔(年、月、日)
ChronoUnit 类:用于计算两个“日期”间隔
String birthday = "1990年01月01日";
// 获取格式化对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
// 格式化,得到日历类的对象
LocalDate birthdayDate = LocalDate.parse(birthday, formatter);
LocalDate now = LocalDate.now();
// 用 ChronoUnit类的方法计算年份差值
long diff = ChronoUnit.YEARS.between(birthdayDate, now);
System.out.println(diff); // 35