JDK8新增日期类
在JDK8中对Date进行了拆分,拆分为:
类 | 说明 | 举例 |
---|---|---|
LocalDate | 表示日期(年月日) | 2021年11月14日 |
LocalTime | 表示时间(时分秒) | 22:46:25 |
LocalDateTime | 表示时间+日期(年月日时分秒) | 2021年11月14日 22:46:25 |
LocalDateTime创建方法
方法说明
方法名 | 说明 |
---|---|
public static LocalDateTime now() {} | 后去当前系统时间 |
public static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond) {} | 使用指定年月日和时分秒初始化一个LocalDateTime对象 |
示例代码
package com.test3.test31;
import java.time.LocalDateTime;
public class JDK8DateDemo01 {
public static void main(String[] args) {
/**
* 当前时间
*/
LocalDateTime nowLocalDateTime = LocalDateTime.now();
System.out.println(nowLocalDateTime);//2021-11-14T22:53:50.546
/**
* 指定时间
*/
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 11, 11, 11, 11);
System.out.println(localDateTime);//2021-11-11T11:11:11
}
}
LocalDateTime获取方法
方法说明
方法名 | 说明 |
---|---|
public int getYear() | 获取年 |
public int getMonthValue() | 获取月份(1-12) |
public int getDayOfMonth() | 获取月份中的第几天(1-31) |
public int getDayOfYear() | 获取一年中的第几天(1-366) |
public DayOfWeek getDayOfWeek() | 获取星期 |
public int getMinute() | 获取分钟 |
public int getHour() | 获取小时 |
示例代码
package com.test3.test31;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
public class JDK8DateDemo02 {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
/**
* 获取年
*/
int year = localDateTime.getYear();
System.out.println("year = " + year);//year = 2021
/**
* 获取月份(1-12)
*/
int monthValue = localDateTime.getMonthValue();
System.out.println("monthValue = " + monthValue);//monthValue = 11
/**
* 获取月份中的第几天(1-31)
*/
int dayOfMonth = localDateTime.getDayOfMonth();
System.out.println("dayOfMonth = " + dayOfMonth);//dayOfMonth = 12
/**
* 获取一年中的第几天(1-366)
*/
int dayOfYear = localDateTime.getDayOfYear();
System.out.println("dayOfYear = " + dayOfYear);//dayOfYear = 316
/**
* 获取星期
*/
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
System.out.println("dayOfWeek = " + dayOfWeek);//dayOfWeek = FRIDAY
/**
* 获取分钟
*/
int minute = localDateTime.getMinute();
System.out.println("minute = " + minute);//minute = 14
/**
* 获取小时
*/
int hour = localDateTime.getHour();
System.out.println("hour = " + hour);//hour = 13
}
}
LocalDateTime转换方法
方法说明
方法名 | 说明 |
---|---|
public LocalDate toLocalDate () | 转换成为一个LocalDate对象 |
public LocalTime toLocalTime () | 转换成为一个LocalTime对象 |
LocalDateTime包含了年月日时分秒
LocalDate只包含年月日
LocalTime只包含时分秒
示例代码
package com.test3.test31;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class JDK8DateDemo03 {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
/**
* 只保留年月日
*/
LocalDate localDate = localDateTime.toLocalDate();
System.out.println("localDate = " + localDate);//localDate = 2021-11-12
/**
* 只保留时分秒
*/
LocalTime localTime = localDateTime.toLocalTime();
System.out.println("localTime = " + localTime);//localTime = 13:14:15
}
}
LocalDateTime格式化和解析
方法说明
方法名 | 说明 |
---|---|
public String format (指定格式) | 把一个LocalDateTime格式化成为一个字符串 |
public LocalDateTime parse (准备解析的字符串, 解析格式) | 把一个日期字符串解析成为一个LocalDateTime对象 |
public static DateTimeFormatter ofPattern(String pattern) | 使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象 |
示例代码
package com.test3.test31;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JDK8DateDemo04 {
/**
* 将字符串格式解析为LocalDateTime
*
* @param time
* @return
*/
private static LocalDateTime parseMethod(String time) {
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parseTime = LocalDateTime.parse(time, pattern);//2021-11-12T13:14:15
return parseTime;
}
/**
* 格式化2021-11-12T13:14:15为指定格式
*
* @return
*/
private static String formatMethod(LocalDateTime localDateTime) {
//System.out.println(localDateTime);//2021-11-12T13:14:15
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatResult = localDateTime.format(pattern);//2021-11-12 13:14:15
return formatResult;
}
}
LocalDateTime增加或者减少时间的方法
方法说明
方法名 | 说明 |
---|---|
public LocalDateTime plusYears (long years) | 添加或者减去年 |
public LocalDateTime plusMonths(long months) | 添加或者减去月 |
public LocalDateTime plusDays(long days) | 添加或者减去日 |
public LocalDateTime plusHours(long hours) | 添加或者减去时 |
public LocalDateTime plusMinutes(long minutes) | 添加或者减去分 |
public LocalDateTime plusSeconds(long seconds) | 添加或者减去秒 |
public LocalDateTime plusWeeks(long weeks) | 添加或者减去周 |
示例代码
以plusYears为例, 其他同理
package com.test3.test31;
import java.time.LocalDateTime;
public class JDK8DateDemo05 {
/**
* 增加年
*/
private static void plusYears() {
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
LocalDateTime localDateTime1 = localDateTime.plusYears(1);//2022-11-12T13:14:15
LocalDateTime localDateTime2 = localDateTime.plusYears(-1);//2020-11-12T13:14:15
LocalDateTime localDateTime3 = localDateTime.plusYears(0);//2021-11-12T13:14:15
}
}
注意点:
·方法返回一个新的的LocalDateTime对象,返回值就是修改之后的结果。
·参数为正数,就是往后加。
·参数为负数,就是往前减。
LocalDateTime减少或者增加时间的方法
方法说明
方法名 | 说明 |
---|---|
public LocalDateTime minusYears (long years) | 减去或者添加年 |
public LocalDateTime minusMonths(long months) | 减去或者添加月 |
public LocalDateTime minusDays(long days) | 减去或者添加日 |
public LocalDateTime minusHours(long hours) | 减去或者添加时 |
public LocalDateTime minusMinutes(long minutes) | 减去或者添加分 |
public LocalDateTime minusSeconds(long seconds) | 减去或者添加秒 |
public LocalDateTime minusWeeks(long weeks) | 减去或者添加周 |
示例代码
以minusMonths为例,其他同理
package com.test3.test31;
import java.time.LocalDateTime;
public class JDK8DateDemo05 {
/**
* 减少月
*/
private static void minusMonths() {
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
LocalDateTime localDateTime1 = localDateTime.minusMonths(1);//2021-10-12T13:14:15
LocalDateTime localDateTime2 = localDateTime.minusMonths(-1);//2021-12-12T13:14:15
LocalDateTime localDateTime3 = localDateTime.minusMonths(0);//2021-11-12T13:14:15
}
}
LocalDateTime修改方法
方法说明
方法名 | 说明 |
---|---|
public LocalDateTime withYear(int year) | 直接修改年 |
public LocalDateTime withMonth(int month) | 直接修改月 |
public LocalDateTime withDayOfMonth(int dayofmonth) | 直接修改日期(一个月中的第几天) |
public LocalDateTime withDayOfYear(int dayOfYear) | 直接修改日期(一年中的第几天) |
public LocalDateTime withHour(int hour) | 直接修改小时 |
public LocalDateTime withMinute(int minute) | 直接修改分钟 |
public LocalDateTime withSecond(int second) | 直接修改秒 |
示例代码
以withYear为例,其他同理
package com.test3.test31;
import java.time.LocalDateTime;
public class JDK8DateDemo05 {
/**
* 修改日期
*/
private static void withYear() {
LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
LocalDateTime localDateTime1 = localDateTime.withYear(2000);//2000-11-12T13:14:15
LocalDateTime localDateTime2 = localDateTime.withMonth(60);//DateTimeException
}
}
如果修改的数值不在合理范围内会抛出异常
Exception in thread "main" java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 60
Period 时间间隔
方法说明
最多只能精确到天
方法名 | 说明 |
---|---|
public static Period between(开始时间,结束时间) | 计算两个“时间"的间隔 |
public int getYears() | 获得这段时间的年数 |
public int getMonths() | 获得此期间的月数 |
public int getDays() | 获得此期间的天数 |
public long toTotalMonths() | 获取此期间的总月数 |
示例代码
package com.test3.test31;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.Temporal;
/**
* @author zhangzengxiu
* @date 2021/11/15
*/
public class JDK8DateDemo06 {
/**
* 时间间隔
*/
private static void periodMethod() {
LocalDate localDate1 = LocalDate.of(2021, 1, 1);
LocalDate localDate2 = LocalDate.of(2051, 12, 12);
Period period = Period.between(localDate1, localDate2);//P30Y11M11D
/**
* P--------->表示Period时间间隔对象
* 30Y------->表示间隔时间的年数
* 11M------->表示间隔时间的月数
* 11D------->表示间隔时间的天数
*/
int pYears = period.getYears();//30
int pMonths = period.getMonths();//11
int pDays = period.getDays();//11
}
}
Duration时间间隔
方法说明
方法名 | 说明 |
---|---|
public static Durationbetween(开始时间,结束时间) | 计算两个“时间"的间隔 |
public long toSeconds() | 获得此时间间隔的秒 |
public int toMillis() | 获得此时间间隔的毫秒 |
public int toNanos() | 获得此时间间隔的纳秒 |
示例代码
package com.test3.test31;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.Temporal;
/**
* @author zhangzengxiu
* @date 2021/11/15
*/
public class JDK8DateDemo06 {
/**
* 时间间隔
*/
private static void durationMethod() {
Temporal localDateTime1 = LocalDateTime.of(2021, 1, 1, 12, 13, 14);
Temporal localDateTime2 = LocalDateTime.of(2021, 3, 4, 15, 16, 17);
Duration duration = Duration.between(localDateTime1, localDateTime2);//PT1491H3M3S
// 获得此时间间隔的秒
long seconds = duration.getSeconds();//5367783
//获得此时间间隔的毫秒
long millis = duration.toMillis();//5367783000
//获得此时间间隔的纳秒
long nanos = duration.toNanos();//5367783000000000
}
}