1.获取几个月前或几个月后的日期
public static LocalDate getMonthPast(LocalDate startDate, int month) {
LocalDate localDate = startDate.minusMonths(month);
return LocalDate.from(localDate);
}
public static LocalDate getMonthDate(LocalDate startDate, int month) {
LocalDate localDate = startDate.plusMonths(month);
return LocalDate.from(localDate);
}
2.计算年龄
/**
* 计算年龄 年为单位
* @Param beginDate
* @Param endDate
* @return java.lang.String
**/
public static String getAgeAboutYear(LocalDate beginDate,LocalDate endDate,Boolean containStr) {
if (ObjectUtil.isNull(beginDate)) {
return "未知";
}
Period period = Period.between(beginDate,endDate);
StringBuilder age = new StringBuilder();
if (period.getYears() > 0) {
age.append(period.getYears());
} else {
age.append(ProjectConstants.ZERO);
}
if (containStr) {
age.append("岁");
}
return age.toString();
}
3.Localdate与String日期字符串互相转换
/**
* localDate转为string
* @param date 日期
* @param formatStr 格式
* @return
*/
public static String localDateToString(LocalDate date, String formatStr) {
String dateStr = "";
if (ObjectUtil.isNotNull(date)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(formatStr);
dateStr = date.format(fmt);
}
return dateStr;
}
/**
* String转为localDate
* @param dateStr 时间字符串
* @param format 格式
* @return
*/
public static LocalDate stringToLocalDate(String dateStr, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
return LocalDate.parse(dateStr, dtf);
}
4.Localdate与Date互相转换
/**
* localDate转为date
* @param localDate 时间
* @return
*/
public static Date localDateTToDate(LocalDate localDate) {
Date date = null;
if (ObjectUtil.isNotNull(localDate)) {
date = Date.from(localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
}
return date;
}
/**
* date转为LocalDate
* @param date
* @return
*/
public static LocalDate dateToLcalDate(Date date) {
LocalDate localDate = null;
if (ObjectUtil.isNotNull(date)) {
localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
return localDate;
}
5.LocaldateTime与String日期字符串互相转换
/**
* localDateTime转为string
* @param date 日期
* @param formatStr 格式
* @return
*/
public static String localDateTimeToString(LocalDateTime date, String formatStr) {
String dateStr = "";
if (ObjectUtil.isNotNull(date)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(formatStr);
dateStr = date.format(fmt);
}
return dateStr;
}
/**
* String转为localDateTime
* @param dateStr 时间字符串
* @param format 格式
* @return
*/
public static LocalDateTime stringToLocalDateTime(String dateStr, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(dateStr, dtf);
}
6.LocaldateTime与Date互相转换
/**
* date转为localDateTime
* @param date 时间
* @return
*/
public static LocalDateTime dateToLocalDateTime(Date date) {
LocalDateTime localDateTime = null;
if (ObjectUtil.isNotNull(date)) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
localDateTime = LocalDateTime.ofInstant(instant, zoneId);
}
return localDateTime;
}
/**
* localDateTime转为date
* @param localDateTime 时间
* @return
*/
public static Date localDateTimeToDate(LocalDateTime localDateTime) {
Date date = null;
if (ObjectUtil.isNotNull(localDateTime)) {
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
date = Date.from(zdt.toInstant());
}
return date;
}
7.LocalDate与LocalDateTime的互相转换
// LocalDate 转 LocalDateTime
LocalDate localDate = LocalDate.now();
LocalDateTime datetime = localDate.atStartOfDay();
// LocalDate 转 LocalDateTime 可指定时分秒
LocalDateTime dateTime = localDate.atTime(15, 30, 1);
// 只指定时分
LocalDateTime dateTime = localDate.atTime(15, 30);
// 也可使用LocalTime
LocalTime of = LocalTime.of(15, 30,30);
LocalDateTime dateTime = localDate.atTime(of);
/**********************************************************************/
// LocalDateTime 转 LocalDate
LocalDate date = dateTime.toLocalDate();
8.获取连续的时间序列
/**
* 获取end时间之前的连续分钟时间序列(String)
* @param end
* @param format 时间格式
* @param minutes 总共时长
* @param step 步长
* @return
*/
public static List<String> getStringMinutesSeries(LocalDateTime end,String format, int minutes, int step) {
List<String> series = new ArrayList<>();
for (int i = 0; i < minutes; i+=step) {
LocalDateTime localDateTime = end.minusMinutes(i);
// 参考第五点
String str = localDateTimeToString(localDateTime, format);
series.add(str);
}
Collections.reverse(series);
return series;
}
/**
* 获取end时间之前的连续时间序列(LocalDateTime)
* @param end
* @param hours 总共时长
* @param step 步长
* @return
*/
public static List<LocalDateTime> getHoursSeries(LocalDateTime end,int hours, int step) {
end = end.truncatedTo(ChronoUnit.HOURS);
List<LocalDateTime> series = new ArrayList<>();
for (int i = 0; i < hours; i+=step) {
LocalDateTime localDateTime = end.minusHours(i);
series.add(localDateTime);
}
Collections.reverse(series);
return series;
}
/**
* 获取end时间之前的连续小时时间序列(String)
* @param end
* @param format 时间格式
* @param hours 总共时长
* @param step 步长
* @return
*/
public static List<String> getStringHoursSeries(LocalDateTime end,String format, int hours, int step) {
List<String> series = new ArrayList<>();
for (int i = 0; i < hours; i+=step) {
LocalDateTime localDateTime = end.minusHours(i);
String str = localDateTimeToString(localDateTime, format);
series.add(str);
}
Collections.reverse(series);
return series;
}
/**
* 获取end时间之前的连续时间序列(LocalDateTime)
* @param end
* @param hours 总共时长
* @param step 步长
* @return
*/
public static List<LocalDateTime> getHoursSeries(LocalDateTime end,int hours, int step) {
end = end.truncatedTo(ChronoUnit.HOURS);
List<LocalDateTime> series = new ArrayList<>();
for (int i = 0; i < hours; i+=step) {
LocalDateTime localDateTime = end.minusHours(i);
series.add(localDateTime);
}
Collections.reverse(series);
return series;
}
/**
* 获取end时间之前的连续天时间序列
* @param end
* @param format 时间格式
* @param days 总共时长
* @param step 步长
* @return
*/
public static List<String> getDaysSeries(LocalDate end,String format, int days, int step) {
List<String> series = new ArrayList<>();
for (int i = 0; i < days; i+=step) {
LocalDate localDateTime = end.minusDays(i);
String str = localDateToString(localDateTime, format);
series.add(str);
}
Collections.reverse(series);
return series;
}
/**
* 获取end时间之前的连续周时间序列
* @param end
* @param format 时间格式
* @param weeks 总共时长
* @param step 步长
* @return
*/
public static List<String> getWeekSeries(LocalDateTime end, String format, int weeks, int step) {
List<String> series = new ArrayList<>();
for (int i = 0; i < weeks; i+=step) {
LocalDateTime localDateTime = end.minusWeeks(i);
String str = localDateTimeToString(localDateTime, format);
series.add(str);
}
Collections.reverse(series);
return series;
}
/**
* 获取end时间之前的连续月时间序列
* @param end
* @param format 时间格式
* @param months 总共时长
* @param step 步长
* @return
*/
public static List<String> getMonthSeries(LocalDate end,String format, int months, int step) {
List<String> series = new ArrayList<>();
for (int i = 0; i < months; i+=step) {
LocalDate localDate = end.minusMonths(i);
String str = DateUtils.localDateToString(localDate, format);
series.add(str);
}
Collections.reverse(series);
return series;
}
/**
* 获取end时间之前的连续年时间序列
* @param end
* @param format 时间格式
* @param years 总共时长
* @param step 步长
* @return
*/
public static List<String> getYearSeries(LocalDate end,String format, int years, int step) {
List<String> series = new ArrayList<>();
for (int i = 0; i < years; i+=step) {
LocalDate localDate = end.minusYears(i);
String str = DateUtils.localDateToString(localDate, format);
series.add(str);
}
Collections.reverse(series);
return series;
}
使用示例:
// 查询现在时间之前的连续12个月,12表示总共12个月,1表示每个月,数组有12个值,如果设置成2,就会变成每2个月的
// 连续序列,数组中只会有6个值
List<String> monthSeries = DateUtils.getMonthSeries(LocalDate.now(), "yyyy-MM", 12, 1);
// 结果: [2022-10, 2022-11, 2022-12, 2023-01, 2023-02, 2023-03, 2023-04, 2023-05, 2023-06, 2023-07, 2023-08, 2023-09]
List<String> monthSeries = DateUtils.getMonthSeries(LocalDate.now(), "yyyy-MM", 12, 2);
// 结果: [2022-11, 2023-01, 2023-03, 2023-05, 2023-07, 2023-09]
List<String> monthSeries = DateUtils.getMonthSeries(LocalDate.now(), "yyyy-MM", 12, 3);
// 结果: [2022-12, 2023-03, 2023-06, 2023-09]
// .........
9.一些自定义的时间格式
public class DateUtils {
public static final String DATE_SHORT_FORMAT = "yyyyMMdd";
public static final String DATE_CH_FORMAT = "yyyy年MM月dd日";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_TIME_FORMAT_EXPORT = "yyyyMMddHHmmss";
public static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.S";
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String DATE_MONTH_FORMAT = "yyyy-MM";
public static final String DATE_MONTH_FORMAT_SPOT = "yyyy.MM";
public static final String DATE_MONTH_FORMAT_SPACE_ZH = "yyyy 年 MM 月 dd 日";
public static final String TIME_FORMAT = "HH:mm:ss";
public static final String MINUTES_FORMAT = "HH:mm";
public static final String HOUR_FORMAT = "HH";
public static final String MONTH_DAY_FORMAT = "MM-dd";
public static final String DATE_HOUR_FORMAT = "yyyy-MM-dd HH";
public static final String DATE_SECOND_FORMAT = "yyyy-MM-dd HH:mm";
public static final String MINUTE_SECOND = ":00:00";
public static final String SECOND = ":00";
private DateUtils() {
}
}
再难的困境,只要扛过去,终将变成往事