Java LocalDate、LocalDateTime日期工具类

一)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"));
}

 

识别二维码关注个人微信公众号

本章完结,待续,欢迎转载!

本文说明:该文章属于原创,如需转载,请标明文章转载来源

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值