针对java8.0获取当月的第一天、最后一天、当周的第一天和最后一天、或者指定日期的所在周的最后一天活第一天,指定日期所在月份的第一天和最后一天。
package com.lghszz.todo.service.utils;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
/**
* @author lgh 2019-06-30
* @version 1.0
* Description: 时间转换器
*/
public class DateUtils {
private DateUtils() {
throw new IllegalStateException("工具类不能实例化!!!");
}
static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
static DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
/**
* 格式化指定时间
*/
public static String formatAnyTime(Date date) {
return formatter2.format(toLocalDateTime(date));
}
/**
* 获取本月第一天
*/
public static String getDateByMonthFirst() {
return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).toString();
}
/**
* 获取当年第一天
*/
public static String getDateByYearFirst() {
return LocalDate.now().with(TemporalAdjusters.firstDayOfYear()).toString();
}
/**
* 获取当周第一天
*/
public static String getDateByWeekFirst() {
return LocalDate.now().minusWeeks(0).with(DayOfWeek.MONDAY).toString();
}
/**
* 获取指定月份月第一天
*
* @param time yyyy-MM-dd
*/
public static String getAnyDateByMonthFirst(String time) {
LocalDate localDate = toLocalDate(time);
return localDate.with(TemporalAdjusters.firstDayOfMonth()).toString();
}
/**
* 获取指定年年第一天
*
* @param time yyyy-MM-dd
*/
public static String getAnyDateByYearFirst(String time) {
LocalDate localDate = toLocalDate(time);
return localDate.with(TemporalAdjusters.firstDayOfYear()).toString();
}
/**
* 获取指定周第一天
*
* @param time yyyy-MM-dd
*/
public static String getAnyDateByWeekFirst(String time) {
LocalDate localDate = toLocalDate(time);
return localDate.minusWeeks(0).with(DayOfWeek.MONDAY).toString();
}
public static void main(String[] args) {
for (int i=0; i<6;i++){
System.out.println(getDateByTopMonth(i));
System.out.println(getDateByTopWeek(i));
}
}
/**
* 字符串类型转换成 LocalDate
*/
private static LocalDate toLocalDate(String time) {
return LocalDate.parse(time, formatter2);
}
private static LocalDateTime toLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}
/**
* 获取指定日期的上几个月 最后一天
*/
public static String getDateByTopMonth(String time, long count) {
LocalDate localDate = toLocalDate(time);
return localDate.minusMonths(count).with(TemporalAdjusters.lastDayOfMonth()).toString();
}
/**
* 获取指定日期的上几周 星期日
*/
public static String getDateByTopWeek(String time, long count) {
LocalDate localDate = toLocalDate(time);
return localDate.minusWeeks(count).with(DayOfWeek.SUNDAY).toString();
}
/**
* 获取上几个月 最后一天
*/
public static String getDateByTopMonth(long count) {
return LocalDate.now().minusMonths(count).with(TemporalAdjusters.lastDayOfMonth()).toString();
}
/**
* 获取上几周 星期日
*/
public static String getDateByTopWeek(long count) {
return LocalDate.now().minusWeeks(count).with(DayOfWeek.SUNDAY).toString();
}
}
如有披露或问题欢迎留言或者入群探讨