1.LocalDate(年月日)常用方法
1.1.1 当月最大时间 不包含时分秒
LocalDate lastday = date.with(TemporalAdjusters.lastDayOfMonth());
1.1.2 当月最小时间 不包含时分秒
LocalDate firstday = date.with(TemporalAdjusters.firstDayOfMonth());
now |
根据当前时间创建LocalDate对象 |
of |
根据指定年月日创建LocalDate对象 |
getYear |
获得年份 |
getMonthValue |
获得月份 |
getMonth |
获得月份枚举值 |
getDayOfMonth |
获得月份天数(1-31) |
getDayOfWeek |
获得星期几 |
getDayOfYear |
获得年份中的第几天(1-366) |
lengthOfYear |
获得当年总天数 |
lengthOfMonth |
获得当月总天数 |
toEpochDay |
与时间纪元(1970年1月1日)相差的天数 |
plusDays |
加天 |
plusWeeks |
加周 |
plusMonths |
加月 |
plusYears |
加年 |
minusDays |
减年 |
minusWeeks |
减周 |
minusMonths |
减月 |
minusYears |
减年 |
withYear |
替换年份 |
withYear |
替换年份 |
withDayOfMonth |
替换日期 |
withDayOfYear |
替换日期 |
isBefore |
是否日期在之前 |
isAfter |
是否日期在之后 |
isEqual |
是否是当前日期 |
isleapYear |
是否是闰年 |
1.1.3 代码示例(获取方法)
public void test(){
//获取当前日期 2023-03-20
System.out.println(LocalDate.now());
//获取指定日期 2000-03-05
System.out.println(LocalDate.of(2014, 3, 5));
//获取日期的年份 2022
System.out.println(LocalDate.now().getYear());
//获取日期的月份 7
System.out.println(LocalDate.now().getMonthValue());
//获取日期的日子 7
System.out.println(LocalDate.now().getDayOfMonth());
//获取日期的星期 THURSDAY
System.out.println(LocalDate.now().getDayOfWeek());
//当天所在这一年的第几天 188
System.out.println(LocalDate.now().getDayOfYear());
//获取当年天数 365
System.out.println(LocalDate.now().lengthOfYear());
//获取当月天数 31
System.out.println(LocalDate.now().lengthOfMonth());
//与时间纪元(1970年1月1日)相差的天数,负数表示在时间纪元之前多少天 19180
System.out.println(LocalDate.now().toEpochDay());
}
1.1.4 代码示例(运算方法)
public void test(){
//加一天
System.out.println("加1天:" + LocalDate.now().plusDays(1));
//加一周
System.out.println("加1周:" + LocalDate.now().plusWeeks(1));
//加一月
System.out.println("加1月:" + LocalDate.now().plusMonths(1));
//加一年
System.out.println("加1年:" + LocalDate.now().plusYears(1));
//减一天
System.out.println("减1天:" + LocalDate.now().minusDays(1));
//减一周
System.out.println("减1周:" + LocalDate.now().minusWeeks(1));
//减一月
System.out.println("减1月:" + LocalDate.now().minusMonths(1));
//减一年
System.out.println("减1年:" + LocalDate.now().minusYears(1));
}
1.1.5 代码示例 (替换方法)
public void test(){
//(1)替换年份:2000-07-07
System.out.println("替换年份为2000:" + LocalDate.now().withYear(2000));
//(2)替换月份:2020-01-07
System.out.println("替换月份为1:" + LocalDate.now().withMonth(1));
//(3)替换日子:2020-07-01
System.out.println("替换日期为1:" + LocalDate.now().withDayOfMonth(1));
//(4)替换天数:一年中的第多少天
System.out.println("替换天数为1:" + LocalDate.now().withDayOfYear(1));
}
1.1.6 代码示例(比较方法)
public void test(){
//是否在当天之前
System.out.println("是否在当天之前:" + LocalDate.now().minusDays(1).isBefore(LocalDate.now()));
//是否在当天之后
System.out.println("是否在当天之后:" + LocalDate.now().plusDays(1).isAfter(LocalDate.now()));
//是否在当天
System.out.println("是否在当天:" + LocalDate.now().isEqual(LocalDate.now()));
//是否是闰年
System.out.println("今年是否是闰年:" + LocalDate.now().isLeapYear());
}
1.2.1 LocalDate 与 String 之间的转换
//字符串转换为LocalDate
LocalDate localdate = LocalDate.parse("2023-03-20");
System.out.println(localdate);
//使用特定格式化(yyyy-MM-dd)从字符串获取LocalDate实例
String str = "2023-03-20";
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(str, fmt1);
System.out.println(date);
//使用特定格式化形式(yyyy/MM/dd)将LocalDate转为字符串
LocalDate today = LocalDate.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd");
String dateStr = today.format(fmt);
System.out.println(dateStr);
1.2.2日期格式化的全部格式
public static String YYYY = "yyyy";
public static String YYYY_MM = "yyyy-MM";
public static String YYYY_MM_DD = "yyyy-MM-dd";
public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
1.2.3LocalDate 与 Date之间的转换
//LocalDate转化为Date
ZonedDateTime zonedDateTime = LocalDate.now().atStartOfDay(ZoneId.systemDefault());
Date date = Date.from(zonedDateTime.toInstant());
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
//Date转化为LocalDate
LocalDate localDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
2. LocalDateTime(年月日时分秒)用法
2.1.1 获得某天最大时间
/**
* 获得某天最大时间 2022-11-11 23:59:59
* @param date
* @return
*/
public static Date getEndOfDay(Date date) {
if (date == null) date = new Date();
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());;
LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
2.1.2 获得某天最小时间
/**
* 获得某天最小时间 2022-11-11 00:00:00
* @param date
* @return
*/
public static Date getStartOfDay(Date date) {
if (date == null) date = new Date();
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
2.1.3 当月最大时间包含时分秒
LocalDateTime lastday = LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
2.1.4 当月最小时间包含时分秒
LocalDateTime firstday = LocalDateTime.of(date.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
2.1.5 方法与描述
方法 |
描述 |
static LocalDateTime now() |
获取默认时区的当前日期时间 |
static LocalDateTime now(Clock clock) |
从指定时钟获取当前日期时间 |
static LocalDateTime now(ZoneId zone) |
获取指定时区的当前日期时间 |
static LocalDateTime of(LocalDate date, LocalTime time) |
根据日期和时间对象获取LocalDateTime 实例 |
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) |
second) 根据指定的年、月、日、时、分、秒获取LocalDateTime 实例 |
getYear |
获取年份 |
getMonth |
使用月份枚举类获取月份 |
getDayOfMonth |
获取日期在该月是第几天 |
getDayOfWeek |
获取日期是星期几 |
getDayOfYear |
获取日期在该年是第几天 |
getHour |
获取小时 |
getMinute |
获取分钟 |
getSecond |
获取秒 |
getNano |
获取纳秒 |
plusYears |
增加年 |
plusMonths |
增加月 |
plusWeeks |
增加周 |
plusDays |
增加天 |
plusHours |
增加小时 |
plusMinutes |
增加分 |
plusSeconds |
增加秒 |
plusNanos |
增加纳秒 |
minusYears |
减少年 |
minusMonths |
减少月 |
meminusWeeks |
减少周 |
minusDays |
减少天 |
minusHours |
减少小时 |
minusMinutes |
减少分 |
minusSeconds |
减少秒 |
minusNanos |
减少纳秒 |
isEqual |
判断日期时间是否相等 |
isBefore |
检查是否在指定日期时间之前 |
isAfter |
检查是否在指定日期时间之后 |
2.1.6 代码示例(获取方法)
public void test(){
//获取默认时区的当前日期时间
System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//获取指定时区的当前日期时间
System.out.println(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
//从指定时钟获取当前日期时间
System.out.println(LocalDateTime.now(Clock.systemDefaultZone()));
//根据日期和时间对象获取LocalDateTime实例
System.out.println(LocalDateTime.of(LocalDate.now(), LocalTime.now()));
//根据指定的年、月、日、时、分、秒获取LocalDateTime实例
System.out.println(LocalDateTime.of(2019, 12, 7, 21, 48, 50));
//获取年份
System.out.println("年 : " + LocalDateTime.now().getYear());
//使用月份枚举类获取月份
System.out.println("月(英文) : " + LocalDateTime.now().getMonth());
//使用月份数字类获取月份
System.out.println(" 月(数字英文): " + LocalDateTime.now().getMonth().getValue());
//获取日期在该月是第几天
System.out.println("天 : " + LocalDateTime.now().getDayOfMonth());
//(获取日期是星期几(英文)
System.out.println("星期几(英文) : " + LocalDateTime.now().getDayOfWeek());
//获取日期是星期几(数字英文)
System.out.println("星期几(数字英文) : " + LocalDateTime.now().getDayOfWeek().getValue());
//(获取日期在该年是第几天
System.out.println("本年的第几天 : " + LocalDateTime.now().getDayOfYear());
//获取小时
System.out.println("时: " + LocalDateTime.now().getHour());
//获取分钟
System.out.println("分: " + LocalDateTime.now().getMinute());
//获取秒
System.out.println("秒: " + LocalDateTime.now().getSecond());
//获取纳秒
System.out.println("纳秒: " + LocalDateTime.now().getNano());
}
2.1.7 代码示例(计算方法)
public void test(){
//增加天数
System.out.println("增加天数 : " + LocalDateTime.now().plusDays(1));
//增加周数
System.out.println("增加周数 : " + LocalDateTime.now().plusWeeks(1));
//增加月数
System.out.println("增加月数 : " + LocalDateTime.now().plusMonths(1));
//增加年数
System.out.println("增加年数 : " + LocalDateTime.now().plusYears(1));
//减少天数
System.out.println("减少天数 : " + LocalDateTime.now().minusDays(1));
//减少月数
System.out.println("减少月数 : " + LocalDateTime.now().minusMonths(1));
//减少周数
System.out.println("减少周数 : " + LocalDateTime.now().minusWeeks(1));
//减少年数
System.out.println("减少年数 : " + LocalDateTime.now().minusYears(1));
//增加小时
System.out.println("增加1小时: " + LocalDateTime.now().plusHours(1));
//增加分钟
System.out.println("增加30分钟: " + LocalDateTime.now().plusMinutes(30));
//增加秒数
System.out.println("增加30秒: " + LocalDateTime.now().plusSeconds(30));
//增加纳秒
System.out.println("增加10000纳秒:" + LocalDateTime.now().plusNanos(10000));
//减少小时
System.out.println("减少1小时:" + LocalDateTime.now().minusHours(1));
//减少分钟
System.out.println("减少30分钟:" + LocalDateTime.now().minusMinutes(30));
//减少秒数
System.out.println("减少30秒: " + LocalDateTime.now().minusSeconds(30));
//减少纳秒
System.out.println("减少10000纳秒:" + LocalDateTime.now().minusNanos(10000));
}
2.1.8 代码示例(比较方法)
public void test(){
//判断日期时间是否相等
System.out.println(LocalDateTime.now().isEqual(LocalDateTime.now()));
//检查是否在指定日期时间之前
System.out.println(LocalDateTime.now().isBefore(LocalDateTime.now()));
//检查是否在指定日期时间之后
System.out.println(LocalDateTime.now().isAfter(LocalDateTime.now()));
}
2.1.9LocalDateTime与 String 之间的转换
public void test(){
//(获取日期部分
System.out.println(LocalDateTime.now().toLocalDate());
//获取时间部分:时、分、秒
System.out.println(LocalDateTime.now().toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
//从文本字符串获取LocalDateTime实例
LocalDateTime ldt2 = LocalDateTime.parse("2019-12-07T21:20:06.303995200");
System.out.println(ldt2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//使用特定格式化形式(格式化参考1.2.2)从文本字符串获取LocalDateTime实例
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt3 = LocalDateTime.parse("2019-12-07 21:20:06", df1);
System.out.println(ldt3);
//使用特定格式化形式将LocalDateTime转为字符串
String ldt4 = df1.format(ldt3);
System.out.println(ldt4);
}
2.2.1 LocalDateTime与 Date之间的转换
public void test(){
//LocalDateTime转化为Date
ZonedDateTime zdt = LocalDateTime.now().atZone(ZoneId.systemDefault());
Date date1 = Date.from(zdt.toInstant());
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date1));
//Date转化为LocalDateTime
LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
3.方法
3.1.1计算两个时间相差的分钟数
/**
* 计算两个时间想差的分钟数
*/
public static String getDateTime(Date startDate, Date endDate) {
// 获得两个时间的毫秒时间差异
long diff = endDate.getTime() - startDate.getTime();
// 计算差多少分钟
long min = TimeUnit.MILLISECONDS.toMinutes(diff);
return String.valueOf(min);
}
3.1.2计算两个时间差(天,时,分)
/**
* 计算两个时间差
*/
public static String getDatePoor(Date endDate, Date nowDate) {
long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
// long ns = 1000;
// 获得两个时间的毫秒时间差异
long diff = endDate.getTime() - nowDate.getTime();
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
// long sec = diff % nd % nh % nm / ns;
return day + "天" + hour + "小时" + min + "分钟";
}
3.1.3计算相差天数
/**
* 计算相差天数
*/
public static int differentDaysByMillisecond(Date date1, Date date2) {
return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
}
3.1.4获取当年的第一天(返回date)
/**
* 获取当年的第一天
*
* @return
*/
public static Date getCurrYearFirst() {
Calendar currCal = Calendar.getInstance();
int currentYear = currCal.get(Calendar.YEAR);
return getYearFirst(currentYear);
}
public static Date getYearFirst(int year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
Date currYearFirst = calendar.getTime();
return currYearFirst;
}
3.1.5获取某年最后一天日期(返回date)
/**
* 获取某年最后一天日期
*
* @param year 年份
* @return Date
*/
public static Date getYearLast(int year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.roll(Calendar.DAY_OF_YEAR, -1);
Date currYearLast = calendar.getTime();
return currYearLast;
}
3.1.6 1970-01-01 加天数 得到日期(日期格式)
/**
* 1970-01-01 加天数 得到日期(日期格式)
*/
public static Date getDaysDate(Integer days) {
Date date = dateTime(YYYY_MM_DD, "1970-01-01");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, days);
return calendar.getTime();
}
3.1.7 计算 1970-01-01 到 规定日期的天数
/**
* 计算 1970-01-01 到 规定日期的天数
*/
public static Integer betweenDays(Date endDate) {
Date dateStart = dateTime(YYYY_MM_DD, "1970-01-01");
long betweenDays = (endDate.getTime() - dateStart.getTime()) / (1000L * 3600L * 24L);
return (int) betweenDays;
}
3.1.8 传入分钟 返回时分秒 HH:mm:ss
/**
* 传入分钟 返回时分秒 HH:mm:ss
*/
public static String getHourToSeconds(Integer time) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date date = new Date(time * 60 * 1000);
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
String returnFormat = formatter.format(date);
return returnFormat;
}
3.1.9 传入HH:mm:ss 获取 分钟数
/**
* 传入HH:mm:ss 获取 分钟数
*/
public static Integer getMinutesNum(Date nowDate) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
String format = formatter.format(nowDate);
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = formatter.parse(format);
long l = date.getTime() / 1000 / 60;
return (int) l;
}
3.2.1 返回当前月份之前的月份 汉字
/**
* 返回当前月份之前的月份 汉字
*/
public static List<String> getMonthList(int year) {
int todayYear = getTodayYear();
String[] num_lower = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"};
List<String> list = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(todayYear == year ? new Date() : getYearLast(year));
int month = calendar.get(Calendar.MONTH) + 1;
for (int i = 1; i <= month; i++) {
list.add(num_lower[i - 1] + "月");
}
return list;
}
3.2.2 判断是否是整点
/**
* 判断是否是整点
*/
public static boolean isFullDian(Date date) {
boolean flag = false;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if (calendar.get(Calendar.MINUTE) == 0 && calendar.get(Calendar.SECOND) == 0) {
flag = true;
}
return flag;
}
3.2.3 判断当前分钟整点
/**
* 判断当前分钟整点
*/
public static boolean isFullMinute(Date date) {
boolean flag = false;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if (calendar.get(Calendar.MINUTE) == 0) {
flag = true;
}
return flag;
}
3.2.4 判断两个时间是否相等 小时
/**
* 判断两个时间是否相等 小时
*/
public static boolean isEqalsDate(Date one, Date two) {
boolean flag = false;
SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd HH");
String oneTime = dft.format(one);
String twoTime = dft.format(two);
if (oneTime.equals(twoTime)) {
flag = true;
}
return flag;
}
4. LocalTime(时分秒)常用方法
方法 |
描述 |
static LocalTime now() |
获取默认时区的当前时间 |
static LocalTime now(ZoneId zone) |
获取指定时区的当前时间 |
static LocalTime now(Clock clock) |
从指定时钟获取当前时间 |
of |
根据指定的时、分、秒获取LocalTime 实例 |
getHour |
获取小时字段 |
getMinute |
获取分钟字段 |
getSecond |
获取秒字段 |
getNano |
获取纳秒字段 |
plusHours |
增加小时数 |
plusMinutes |
增加分钟数 |
plusSeconds |
增加秒数 |
plusNanos |
增加纳秒数 |
minusHours |
减少小时数 |
minusMinutes |
减少分钟数 |
minusSeconds |
减少秒数 |
minusNanos |
减少纳秒数 |
compareTo |
时间与另一个时间比较 |
isAfter |
检查时间是否在指定时间之后 |
isBefore |
检查时间是否在指定时间之前 |
4.1.1代码示例(获取方法)
public void test(){
//获取默认时区的当前时间 14:11:31.294
System.out.println(LocalTime.now());
//获取指定时区的当前时间 14:11:31.392
System.out.println(LocalTime.now(ZoneId.of("Asia/Shanghai")));
//从指定时钟获取当前时间 14:11:31.392
System.out.println(LocalTime.now(Clock.systemDefaultZone()));
//指定获取时分秒
System.out.println(LocalTime.of(12, 30, 30));
//指定获取时分
System.out.println(LocalTime.of(12, 30));
//指定获取时分秒纳秒
System.out.println(LocalTime.of(12, 30, 30, 123));
//获取小时字段
System.out.println("时: " + LocalTime.now().getHour());
//获取分钟字段
System.out.println("分: " + LocalTime.now().getMinute());
//获取秒字段
System.out.println("秒: " + LocalTime.now().getSecond());
//获取纳秒字段
System.out.println("纳秒: " + LocalTime.now().getNano());
}
4.1.2代码示例(计算方法)
public void test(){
//增加一小时
System.out.println("增加1小时: " + LocalTime.now().plusHours(1));
//增加三十分钟
System.out.println("增加30分钟: " + LocalTime.now().plusMinutes(30));
//增加三十秒
System.out.println("增加30秒: " + LocalTime.now().plusSeconds(30));
//增加一万纳秒
System.out.println("增加10000纳秒:" + LocalTime.now().plusNanos(10000));
//减少一小时
System.out.println("减少1小时: " + LocalTime.now().minusHours(1));
//减少三十分钟
System.out.println("减少30分钟: " + LocalTime.now().minusMinutes(30));
//减少三十秒
System.out.println("减少30秒: " + LocalTime.now().minusSeconds(30));
//减少一万纳秒
System.out.println("减少10000纳秒:" + LocalTime.now().minusNanos(10000));
}
4.1.3代码示例(比较方法)
public void test(){
//时间与另一个时间比较 0(相等)正数(大)负数(小)
System.out.println(LocalTime.now().compareTo(LocalTime.now()));
//检查时间是否在指定时间之后
System.out.println(LocalTime.now().isAfter(LocalTime.now()));
//检查时间是否在指定时间之前
System.out.println(LocalTime.now().isBefore(LocalTime.now()));
}
4.1.4 LocalTime与 String 之间的转换
public void test(){
//从文本字符串获取LocalTime实例
LocalTime localTime1 = LocalTime.parse("12:30:30");
System.out.println(localTime1);
//使用特定格式化形式从文本字符串获取LocalTime实例
LocalTime localTime2 = LocalTime.parse("12:30:30", DateTimeFormatter.ofPattern("HH:mm:ss"));
System.out.println(localTime2);
//使用特定格式化形式将LocalTime转为字符串
DateTimeFormatter df1 = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime localTime3 = LocalTime.now();
System.out.println(localTime3.format(df1));
}