一)Java日期处理类
java.time.LocalDate:表示日期,只包含年月日,如yyyy-MM-dd
java.time.LocalTime:表示日期,只包含时分秒,如HH:mm:ss
java.time.LocalDateTime:表示日期,包含年月日时分秒,如yyyy-MM-dd HH:mm:ss
备注:原先日期处理都是用SimpleDateFormat格式化,但该类存在线程安全问题。jdk1.8之后提供了一些新的日期处理类。
二)LocalDate详解
LocalDate默认日期格式为:yyyy-MM-dd
1)当前年份,如yyyy
LocalDate.now().getYear(); // 2019
2)当前月份,月份字段从1到12,如MM
LocalDate.now().getMonthValue(); // 11
3)今天是当前年份的第几天
LocalDate.now().getDayOfYear(); // 319
4)今天是当前月份的第几天
LocalDate.now().getDayOfMonth(); // 15
5)今天是当前周的第几天
LocalDate.now().getDayOfWeek().getValue(); // 5
6)指定某一年的第几天,1=第一天、365=最后一天
LocalDate.ofYearDay(2019, 1); // 2019-01-01
LocalDate.ofYearDay(2019, 365); // 2019-12-31
7)指定某一年某一月的第几天,月份从1到12
LocalDate.of(2019, 2, 28); // 2019-02-28
8)过去某一年的今天
LocalDate.now().minusYears(1); // 2018-11-15
LocalDate.now().minusYears(2); // 2017-11-15
9)过去某一月的今天,超过12会自动计算成去年
LocalDate.now().minusMonths(1); // 2019-10-15
LocalDate.now().minusMonths(2); // 2019-09-15
10)过去某一周的今天
LocalDate.now().minusWeeks(1); // 2019-11-08
LocalDate.now().minusWeeks(2); // 2019-11-01
11)过去某一天
LocalDate.now().minusDays(319); // 2019-01-01
LocalDate.now().minusDays(366); // 2018-11-14
12)未来某一年的今天
LocalDate.now().plusYears(1); // 2020-11-15
LocalDate.now().plusYears(2); // 2021-11-15
13)未来某一月的今天
LocalDate.now().plusMonths(1); // 2019-12-15
LocalDate.now().plusMonths(2); // 2020-01-15
14)未来某一周的今天
LocalDate.now().plusWeeks(1); // 2019-11-22
LocalDate.now().plusWeeks(2); // 2019-11-29
15)未来某一天
LocalDate.now().plusDays(1); // 2019-11-16
LocalDate.now().plusDays(2); // 2019-11-17
16)指定年份的今天,0到9999年
LocalDate.now().withYear(2020); // 2020-11-15
17)指定当年月份的今天,月份字段从1到12
LocalDate.now().withMonth(1); // 2019-01-15
LocalDate.now().withMonth(12); // 2019-12-15
18)指定当年的第几天, 0到365之间
LocalDate.now().withDayOfYear(1); // 2019-01-01
LocalDate.now().withDayOfYear(365); // 2019-12-31
19)指定当年当月的第几天, 0到31之间
LocalDate.now().withDayOfMonth(1); // 2019-11-01
LocalDate.now().withDayOfMonth(28); // 2019-11-28
20)从1970-01-01开始计算,加上指定的天数
LocalDate.ofEpochDay(0); // 1970-01-01
21)当前年份的总天数
LocalDate.now().lengthOfYear(); // 365
22)当前月份的总天数
LocalDate.now().lengthOfMonth(); // 30
23)当前年月日(默认格式)
LocalDate.now(); // 2019-11-15
24)当前年月日(指定格式)
LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"); // 2019年11月15日
25)将指定的年月日转换成LocalDate模式
LocalDate.parse("2019-11-01"); // 2019-11-01
26)将指定的年月日转换成LocalDate模式, 格式要对应
LocalDate.parse("2019年11月01日", DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
27)从1970-01-01到今天总共的天数
LocalDate.now().toEpochDay(); // 18215
28)检查当前年份是否是闰年
LocalDate.now().isLeapYear(); // false
三)LocalDateTime详解
LocalDateTime默认日期格式为:yyyy-MM-dd HH:mm:ss
1)当前年份,如yyyy
LocalDateTime.now().getYear(); // 2019
2)当前月份,月份字段从1到12,如MM
LocalDateTime.now().getMonthValue(); // 11
3)今天是当前年份的第几天
LocalDateTime.now().getDayOfYear(); // 319
4)今天是当前月份的第几天
LocalDateTime.now().getDayOfMonth(); // 15
5)今天是当前周的第几天
LocalDateTime.now().getDayOfWeek().getValue(); // 5
6)过去某一年的今天
LocalDateTime.now().minusYears(1); // 2018-11-15T22:03:40.126
LocalDateTime.now().minusYears(2); // 2017-11-15T22:03:40.126
7)过去某一月的今天
LocalDateTime.now().minusMonths(1); // 2019-10-15T22:03:40.126
LocalDateTime.now().minusMonths(2); // 2019-09-15T22:03:40.126
8)过去某一周的今天
LocalDateTime.now().minusWeeks(1); // 2019-11-08T22:03:40.126
LocalDateTime.now().minusWeeks(2); // 2019-11-01T22:03:40.126
9)过去某一天
LocalDateTime.now().minusDays(366); // 2018-11-14T22:03:40.126
LocalDateTime.now().minusDays(1); // 2019-11-14T22:03:40.126
10)未来某一年的今天
LocalDateTime.now().plusYears(1); // 2020-11-15T22:03:40.126
LocalDateTime.now().plusYears(2); // 2021-11-15T22:03:40.126
11)未来某一月的今天
LocalDateTime.now().plusMonths(1); // 2019-12-15T22:03:40.126
LocalDateTime.now().plusMonths(2); // 2020-01-15T22:03:40.126
12)未来某一周的今天
LocalDateTime.now().plusWeeks(1); // 2019-11-22T22:03:40.126
LocalDateTime.now().plusWeeks(2); // 2019-11-29T22:03:40.126
13)未来某一天
LocalDateTime.now().plusDays(1); // 2019-11-16T22:03:40.126
LocalDateTime.now().plusDays(2); // 2019-11-17T22:03:40.126
14)指定年份的今天,0到9999年
LocalDateTime.now().withYear(2020); 2020-11-15T22:03:40.126
15)指定当年月份的今天
LocalDateTime.now().withMonth(1); // 2019-01-15T22:03:40.126
LocalDateTime.now().withMonth(11); // 2019-11-15T22:03:40.126
16)指定当年的第几天, 0到365之间
LocalDateTime.now().withDayOfYear(33); // 2019-02-02T22:03:40.126
LocalDateTime.now().withDayOfYear(365); // 2019-12-31T22:03:40.126
17)指定当年当月的第几天, 0到31之间
LocalDateTime.now().withDayOfMonth(1); // 2019-11-01T22:03:40.126
LocalDateTime.now().withDayOfMonth(15); // 2019-11-15T22:03:40.126
18)当前年月日(默认格式)
LocalDateTime.now(); // 2019-11-15T22:03:40.126
19)当前年月日(指定格式)
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2019-11-15 22:03:40
20)将指定的年月日转换成LocalDate模式
LocalDateTime.parse("2019-11-01T00:00:00"); // 2019-11-01T00:00
21)将指定的年月日转换成LocalDate模式, 格式要对应
LocalDateTime.parse("2019-11-01 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2019-11-01T23:59:59
四)LocalDate、LocalDateTime常用转换
1)将java.util.Date转换成java.time.LocalDate
/**
* 将java.util.Date转换成java.time.LocalDate
* @param date
* @return
*/
public static LocalDate dateConvertLocalDate(Date date) {
if (date == null) {
return null;
}
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
return localDate;
}
2)将java.time.LocalDate转换成String
/**
* 将java.time.LocalDate转换成String
* @param localDate
* @return
*/
public static String localDateConvertString(LocalDate localDate) {
if (localDate == null) {
return null;
}
return localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
3)将String转换成java.time.LocalDate
/**
* 将String转换成java.time.LocalDate
* @param date
* @return
*/
public static LocalDate stringConvertLocalDate(String date) {
if (date == null) {
return null;
}
return LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
4)将java.time.LocalDate转换成时间戳,秒数
/**
* 将java.time.LocalDate转换成时间戳,秒数
* @param
* @return
*/
public static long localDateConvertTimeStamp(LocalDate localDate) {
if (localDate == null) {
return 0L;
}
return localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
}
5)将时间戳转换成java.time.LocalDate
/**
* 将时间戳转换成java.time.LocalDate
* @param stringTimeStamp
* @return
*/
public static String timeStampConvertLocalDate(String stringTimeStamp) {
if (stringTimeStamp == null) {
return "";
}
Long timestamp;
if (stringTimeStamp.length() == 10) {
timestamp = Long.valueOf(stringTimeStamp + "000");
} else if (stringTimeStamp.length() == 13) {
timestamp = Long.valueOf(stringTimeStamp);
} else {
return "";
}
LocalDate localDate = Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();
return localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
6)将java.util.Date转换成java.time.LocalDateTime
/**
* 将java.util.Date转换成java.time.LocalDateTime
* @param date
* @return
*/
public static LocalDateTime dateConvertLocalDateTime(Date date) {
if (date == null) {
return null;
}
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
return localDateTime;
}
7)将java.time.LocalDateTime转换成java.util.Date
/**
* 将java.time.LocalDateTime转换成java.util.Date
* @param localDateTime
* @return
*/
public static Date localDateTimeConvertDate(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
return Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
}
8)将java.time.LocalDateTime转换成String
/**
* 将java.time.LocalDateTime转换成String
* @param localDateTime
* @return
*/
public static String localDateTimeConvertString(LocalDateTime localDateTime) {
if (localDateTime == null) {
return null;
}
return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
9)将String转换成java.time.LocalDateTime
/**
* 将String转换成java.time.LocalDateTime
* @param date
* @return
*/
public static LocalDateTime stringConvertLocalDateTime(String date) {
if (date == null) {
return null;
}
return LocalDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
10)将java.time.LocalDateTime转换成时间戳,秒数
/**
* 将java.time.LocalDateTime转换成时间戳,秒数
* @param localDateTime
* @return
*/
public static long localDateTimeConvertLong(LocalDateTime localDateTime) {
if (localDateTime == null) {
return 0L;
}
return localDateTime.toEpochSecond(ZoneOffset.of("+8"));
}
11)将java.time.LocalDateTime转换成时间戳,毫秒数
/**
* 将java.time.LocalDateTime转换成时间戳,毫秒数
* @param localDateTime
* @return
*/
public static long localDateTimeConvertLongSS(LocalDateTime localDateTime) {
if (localDateTime == null) {
return 0L;
}
return localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
}
12)将时间戳转换成java.time.LocalDateTime
/**
* 将时间戳转换成java.time.LocalDateTime
* @param stringTimeStamp
* @return
*/
public static String timeStampConvertLocalDateTime(String stringTimeStamp) {
if (stringTimeStamp == null) {
return "";
}
Long timestamp;
if (stringTimeStamp.length() == 10) {
timestamp = Long.valueOf(stringTimeStamp + "000");
} else if (stringTimeStamp.length() == 13) {
timestamp = Long.valueOf(stringTimeStamp);
} else {
return "";
}
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源