package com.common.util;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public enum DateUtils {
private final static DateTimeFormatter dtf_date = DateTimeFormatter.ISO_LOCAL_DATE;
public static LocalDateTime getLocalDateTime(String date, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime ldt = LocalDateTime.parse(date, formatter);
return ldt;
}
public static String getDateTimeStr(LocalDateTime dateTime, String pattern) {
if(dateTime == null) {
return "";
}
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
return dateTime.format(dateTimeFormatter);
}
public static String getLocalDateStr(LocalDate dateTime, String pattern) {
if(dateTime == null) {
return "";
}
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
return dateTime.format(dateTimeFormatter);
}
/**
* 获取今天:年-月-日
* @return
*/
public static String getTodayYmd() {
return LocalDate.now().format(dtf_date);
}
public static String getYesterdayYmd() {
return LocalDate.now().minusDays(1).format(dtf_date);
}
public static String getTomorrowYmd() {
return LocalDate.now().minusDays(-1).format(dtf_date);
}
/**
* 季度:开始/结束date
public static String[] getQuaterDays(int amount) {
LocalDate date = LocalDate.now().plusMonths(amount*3);
int month = date.getMonth().getValue();
if(month <= 3) {
return new String[]{date.plusMonths(1-month).with(TemporalAdjusters.firstDayOfMonth()).format(dtf_date),
date.withMonth(3).with(TemporalAdjusters.lastDayOfMonth()).format(dtf_date)};
} else if(month <= 6) {
return new String[]{date.plusMonths(4-month).with(TemporalAdjusters.firstDayOfMonth()).format(dtf_date),
date.withMonth(6).with(TemporalAdjusters.lastDayOfMonth()).format(dtf_date)};
} else if(month <= 9) {
return new String[]{date.plusMonths(7-month).with(TemporalAdjusters.firstDayOfMonth()).format(dtf_date),
date.withMonth(9).with(TemporalAdjusters.lastDayOfMonth()).format(dtf_date)};
} else {
return new String[]{date.plusMonths(10-month).with(TemporalAdjusters.firstDayOfMonth()).format(dtf_date),
date.withMonth(12).with(TemporalAdjusters.lastDayOfMonth()).format(dtf_date)};
}
}
*/
/**
* 年:开始/结束date
* */
public static String[] getYearDays(int amount) {
LocalDate date = LocalDate.now().plusYears(amount);
String start = date.with(TemporalAdjusters.firstDayOfYear()).format(dtf_date);
String end = date.with(TemporalAdjusters.lastDayOfYear()).format(dtf_date);
return new String[] {start, end};
}
/**
* 过去的num天
* @param amount
* @return
public static String[] getLastNumDays(int amount) {
LocalDate date = LocalDate.now();
String start = date.plusDays(amount).format(dtf_date);
String end = date.plusDays(-1).format(dtf_date);
return new String[] {start, end};
}
*/
/**
* 将来的NUm天
* @param amount
* @return
public static String[] getNextNumDays(int amount) {
LocalDate date = LocalDate.now();
String start = date.plusDays(1).format(dtf_date);
String end = date.plusDays(amount).format(dtf_date);
return new String[] {start, end};
}
*/
/**
* 获取自然周周期:周一/周日
* @param amount
* 当前周:0
* 上一周:-1
* 下一周:1
* @return
*/
public static String[] getNaturalWeekCycle(int amount) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setFirstDayOfWeek(Calendar.MONDAY);//以周一为首日
calendar.setTimeInMillis(System.currentTimeMillis());//当前时间
calendar.add(Calendar.DAY_OF_MONTH, amount*7);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//周一
LocalDateTime start = LocalDateTime.ofInstant(Instant.ofEpochMilli(calendar.getTimeInMillis()), ZoneOffset.of("+8"));
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//周日
LocalDateTime end = LocalDateTime.ofInstant(Instant.ofEpochMilli(calendar.getTimeInMillis()), ZoneOffset.of("+8"));
return new String[] {getDateTimeStr(start, "yyyy-MM-dd"), getDateTimeStr(end, "yyyy-MM-dd")};
}
/**
* 获取自然月周期:第一天/最后一天
* @param amount
* 当前月:0
* 上一月:-1
* 下一月:1
* @return
*/
public static String[] getNaturalMonthCycle(int amount) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setTimeInMillis(System.currentTimeMillis());//当前时间
calendar.add(Calendar.MONTH, amount);
calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
LocalDateTime start = LocalDateTime.ofInstant(Instant.ofEpochMilli(calendar.getTimeInMillis()), ZoneOffset.of("+8"));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
LocalDateTime end = LocalDateTime.ofInstant(Instant.ofEpochMilli(calendar.getTimeInMillis()), ZoneOffset.of("+8"));
return new String[] {getDateTimeStr(start, "yyyy-MM-dd"), getDateTimeStr(end, "yyyy-MM-dd")};
}
/**
* @return 返回当前年
*/
public static String getTodayYYYY() {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy");
return LocalDate.now().format(dateTimeFormatter);
}
/**
* @Description: 获取季度第一天
* 1.根据给定日期计算当前季度的第一个月份
* 2.设置日历的月份为当前季度的第一个月份
* 3.最后设置日历月份天数为第一天即可
**/
public static String getQuarterStart(Date date) {
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(date);
//get方法:获取给定日历属性的值,如 endCalendar.get(Calendar.MONTH) 获取日历的月份
//计算季度数:由于月份从0开始,即1月份的Calendar.MONTH值为0,所以计算季度的第一个月份只需 月份 / 3 * 3
startCalendar.set(Calendar.MONTH, (((int) startCalendar.get(Calendar.MONTH)) / 3) * 3);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
LocalDateTime start = LocalDateTime.ofInstant(Instant.ofEpochMilli(startCalendar.getTimeInMillis()), ZoneOffset.of("+8"));
return getDateTimeStr(start, "yyyy-MM-dd");
}
/**
* @Description: 获取季度最后一天
**/
public static String getQuarterEnd(Date date) { // 季度结束
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(date);
//计算季度数:由于月份从0开始,即1月份的Calendar.MONTH值为0,所以计算季度的第三个月份只需 月份 / 3 * 3 + 2
endCalendar.set(Calendar.MONTH, (((int) endCalendar.get(Calendar.MONTH)) / 3) * 3 + 2);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
LocalDateTime start = LocalDateTime.ofInstant(Instant.ofEpochMilli(endCalendar.getTimeInMillis()), ZoneOffset.of("+8"));
return getDateTimeStr(start, "yyyy-MM-dd");
}
/**
* @Description: 获取半年度最后一天
**/
public static String getHalfYearEnd() { // 季度结束
Calendar cDay = Calendar.getInstance();
int curMonth = cDay.get(Calendar.MONTH);
if (curMonth >= Calendar.JANUARY && curMonth <= Calendar.JUNE){
cDay.set(Calendar.MONTH, Calendar.JUNE);
}
if (curMonth >= Calendar.JULY && curMonth <= Calendar.DECEMBER) {
cDay.set(Calendar.MONTH, Calendar.DECEMBER);
}
cDay.set(Calendar.DAY_OF_MONTH, cDay.getActualMaximum(Calendar.DAY_OF_MONTH));
//也可以设置小时分钟秒
//cDay.set(Calendar.HOUR,0);
//cDay.set(Calendar.MINUTE,0);
//cDay.set(Calendar.SECOND,0);
LocalDateTime start = LocalDateTime.ofInstant(Instant.ofEpochMilli(cDay.getTimeInMillis()), ZoneOffset.of("+8"));
return getDateTimeStr(start, "yyyy-MM-dd");
}
/**
* 获取前/后半年的开始时间
* @return
*/
public static String getHalfYearStartTime(){
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
String now = null;
try {
if (currentMonth >= 1 && currentMonth <= 6){
c.set(Calendar.MONTH, 0);
}else if (currentMonth >= 7 && currentMonth <= 12){
c.set(Calendar.MONTH, 6);
}
c.set(Calendar.DATE, 1);
LocalDateTime start = LocalDateTime.ofInstant(Instant.ofEpochMilli(c.getTimeInMillis()), ZoneOffset.of("+8"));
return getDateTimeStr(start, "yyyy-MM-dd");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
}
java日期处理年,半年,季度,月,周等
最新推荐文章于 2024-04-24 22:52:03 发布