- 获取今日日期
- 获取本月第一天日期
- 获取本月最后一天日期
- date转日期字符串
- 日期字符串转date
- 日期字符串格式化
- 根据date获取past天前的日期
- 获取当前年周数:yyyy-w
- 获取范围时间内的日期集合
public class MyDateUtils {
public static final String NORMAL_DATE_FORMAT = "yyyy-MM-dd";
public static final String NORMAL_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
/**
* 获取今日日期 yyyy-MM-dd
*/
public static String getToday() {
return LocalDate.now().toString();
}
/**
* 获取本月第一天日期 2019-11-01
*/
public static String getFirstDayOfMonth() {
return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).toString();
}
/**
* 获取本月最后一天日期 2019-11-30
*/
public static String getLastDayOfMonth() {
return LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).toString();
}
/**
* date转字符串
*/
public static String dateToDateStr(Date date, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
return dateTimeFormatter.format(localDateTime);
}
public static String dateToDateStr(Date date) {
return dateToDateStr(date, NORMAL_DATE_FORMAT);
}
/**
* 日期字符串转date
*/
public static Date dateStrToDate(String dateStr, String format) {
DateTimeFormatter dateDtf = DateTimeFormatter.ofPattern(format);
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, dateDtf);
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atStartOfDay(zone).toInstant();
return Date.from(instant);
}
public static Date dateStrToDate(String dateStr) {
return dateStrToDate(dateStr, NORMAL_DATE_FORMAT);
}
/**
* 日期字符串格式化
*/
public static String dateToStr(Long timestamp, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
Date date = new Date(timestamp);
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
return dateTimeFormatter.format(localDateTime);
}
/**
* 根据date获取past天前的日期
*/
public static Date getPastDate(Date date, int past) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
return calendar.getTime();
}
public static String getPastDate(String dateStr, int past) {
Date date = dateStrToDate(dateStr);
return dateToDateStr(getPastDate(date, past));
}
public static String getYesterday(String dateStr) {
return getPastDate(dateStr, 1);
}
/**
* 当前年周数:yyyy-w
*/
public static String getYearWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//设置一周的第一天是周一
cal.setFirstDayOfWeek(Calendar.MONDAY);
int year = cal.get(Calendar.YEAR);
int week = cal.get(Calendar.WEEK_OF_YEAR);
cal.add(Calendar.DAY_OF_MONTH, -7); //上一周
//判断是否同一年,并且本周周数小于上周周数,则在上周周数的基础上加一
if (year == cal.get(Calendar.YEAR) && week < cal.get(Calendar.WEEK_OF_YEAR)) {
week = cal.get(Calendar.WEEK_OF_YEAR) + 1;
}
return year + "-" + week;
}
/**
* 获取范围时间内的日期集合
*/
public static List<String> getBetweenDays(String startDate, String endDate) {
if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
return Collections.emptyList();
}
Date start = dateStrToDate(startDate);
Date end = dateStrToDate(endDate);
if (start.compareTo(end) > 0) {
return Collections.emptyList();
}
// 返回的日期集合
List<String> days = new ArrayList<>();
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
tempEnd.add(Calendar.DATE, 1);
while (tempStart.before(tempEnd)) {
days.add(dateToDateStr(tempStart.getTime()));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
return days;
}
}