/**
* 时间工具类
*
*/
public final class DateUtils {
private DateUtils() {
}
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_TIME_FORMAT_PURE = "yyyyMMddHHmmss";
public static final String DATE_TIME_FORMAT_NYR = "yyyy年MM月dd日";
public static final String DATE_TIME_FORMAT1 = "yyyy-MM-dd HH:mm";
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String TIME_FORMAT = "HH:mm:ss";
public static final String YYYYMM_FORMAT = "yyyyMM";
public static final String YYYYMMDD_FORMAT = "yyyyMMdd";
public static final String YYMMDD_FORMAT = "yyMMdd";
public static final String YYMM_FORMAT = "yyMM";
public static final String D_FORMAT = "d";
public static final String H = "H";
public static final Integer ONE_DAY_MILLISECONDS = 1000 * 60 * 60 * 24;
public static final Integer ONE_HOUR_MILLISECONDS = 1000 * 60 * 60;
public static final Long ONE_HOUR_MILLISECONDSL = 1000 * 60 * 60L;
public static final Long ONE_DAY_MILLISECONDSL = 1000 * 60 * 60 * 24L;
public static final Integer ONE_DAY_MILLISECONDS_END = ONE_DAY_MILLISECONDS - 1;
public static final Integer TWENTY_THREE = 23;
public static final Integer FIFTY_NINE = 59;
public static final Integer ONE_MILLISECONDS_END = 999;
/**
* 根据给定时间获取当天的开始时间
*
* @param date 时间戳
* @return 时间戳
*/
public static Long getStartTimeOfDay(Long date) {
if (date != null) {
Calendar day = Calendar.getInstance();
day.setTimeInMillis(date);
day.set(Calendar.HOUR_OF_DAY, 0);
day.set(Calendar.MINUTE, 0);
day.set(Calendar.SECOND, 0);
day.set(Calendar.MILLISECOND, 0);
return day.getTimeInMillis();
} else {
return null;
}
}
/**
* 根据给定时间获取当天的结束时间
*
* @param date date
* @return Long
*/
public static Long getEndTimeOfDay(Long date) {
if (date != null) {
Calendar day = Calendar.getInstance();
day.setTimeInMillis(date);
day.set(Calendar.HOUR_OF_DAY, TWENTY_THREE);
day.set(Calendar.MINUTE, FIFTY_NINE);
day.set(Calendar.SECOND, FIFTY_NINE);
day.set(Calendar.MILLISECOND, ONE_MILLISECONDS_END);
return day.getTimeInMillis();
} else {
return null;
}
}
/**
* 获取本年度第一天
*/
public static Long getYearFirst(Long date){
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, getYear(date));
Long currYearFirst = calendar.getTimeInMillis();
return currYearFirst;
}
/**
* 获取本年度最后一天
*/
public static Long getYearEnd(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, getYear(date));
calendar.set(Calendar.MONTH, 11);//月份减一
calendar.set(Calendar.DAY_OF_MONTH, 31);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTimeInMillis();
}
/**
* 获取日期所在月份的第一天
*
* @param date date
* @return Long
*/
public static Long getStartDayOfMonth(Long date) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getYear(date));
cal.set(Calendar.MONTH, getMonth(date));
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
/**
* 获取日期所在月份的最后一天
*
* @param date date
* @return Long
*/
public static Long getLastDayOfMonth(Long date) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date);
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, lastDay);
cal.set(Calendar.HOUR_OF_DAY, TWENTY_THREE);
cal.set(Calendar.MINUTE, FIFTY_NINE);
cal.set(Calendar.SECOND, FIFTY_NINE);
cal.set(Calendar.MILLISECOND, ONE_MILLISECONDS_END);
return cal.getTimeInMillis();
}
/**
* 根据给定时间获取日期在本月的第几天
*
* @param date
* @return
*/
public static int getDay(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* 根据给定时间获取日期在的月份
*
* @param date date
* @return int
*/
public static int getMonth(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
return calendar.get(Calendar.MONTH);
}
/**
* 根据给定的时间获取日期所在的年份
*
* @param date date
* @return int
*/
public static int getYear(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
return calendar.get(Calendar.YEAR);
}
/**
* 根据给定的时间获取年月日时分秒
*
* @param date 日期
* @return 年月日时分秒
*/
public static String getDateTime(Date date) {
SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_PURE);
return df.format(date);
}
public static String getDateTimeFormat(Long date) {
SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT);
return df.format(date);
}
/**
* 根据给定的时间获取年月日
*
* @param date 日期
* @return 年月日时分秒
*/
public static String getDayDateTime(Long date) {
SimpleDateFormat df = new SimpleDateFormat(YYYYMMDD_FORMAT);
return df.format(date);
}
public static String getDayDateTimeYYMMDD(Long date) {
SimpleDateFormat df = new SimpleDateFormat(YYMMDD_FORMAT);
return df.format(date);
}
/**
* 根据给定的时间,格式获取时间
*
* @param time 日期
* @return
*/
public static String stampToDate(Long time, String format) {
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(time);
}
/**
* @param dateStr 时间
* @param format 格式
* @return Long 时间戳
* @MethodName dateToStamp
* @Description 日期转换成时间戳
*/
public static Long dateToStamp(String dateStr, String format) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
long ts = 0L;
try {
Date date = simpleDateFormat.parse(dateStr);
ts = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return ts;
}
/**
* 判断两个日期相隔天数
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return Integer
*/
public static Integer diffDays(Long startTime, Long endTime) {
return (int) ((getStartTimeOfDay(endTime) - getStartTimeOfDay(startTime)) / ONE_DAY_MILLISECONDS);
}
/**
* @param startTime 开始时间
* @param endTime 结束时间 (可以为null)
* @return 明天下午6:00--8:00 / 后天凌晨02:00
* @MethodName timeSwitch
* @Description 时间描述
*/
public static String timeSwitch(Long startTime, Long endTime) {
StringBuilder sb = new StringBuilder();
Long nowTime = System.currentTimeMillis();
Long dayStartTime = DateUtils.getStartTimeOfDay(nowTime);
Long dayEndTime = DateUtils.getEndTimeOfDay(nowTime);
if (startTime != null) {
//日期
//当天
if (startTime >= dayStartTime && startTime <= dayEndTime) {
sb.append("");
} else if (startTime >= dayStartTime + DateUtils.ONE_DAY_MILLISECONDSL && startTime <= dayEndTime + DateUtils.ONE_DAY_MILLISECONDSL) {
sb.append("明天");
} else if (startTime >= dayStartTime + DateUtils.ONE_DAY_MILLISECONDSL * 2L && startTime <= dayEndTime + DateUtils.ONE_DAY_MILLISECONDSL * 2L) {
sb.append("后天");
} else {
sb.append(DateUtils.getDay(startTime) + "日");
}
//时间段 凌晨 上午 下午
Long dayStart1 = DateUtils.getStartTimeOfDay(startTime);
int periodFlag = 0;
if (startTime < dayStart1 + 21600000L) { // 今天6点前
periodFlag = 1;
sb.append("凌晨");
} else if (startTime < dayStart1 + 43200000L) { // 今天12点前
periodFlag = 2;
sb.append("上午");
} else {
periodFlag = 3;
sb.append("下午");
}
sb.append(getSpecificTime(startTime));
//结束时间
if (endTime != null) {
Long dayStart2 = DateUtils.getStartTimeOfDay(startTime);
sb.append("--");
if (endTime < dayStart2 + 21600000L) { // 今天6点前
if (periodFlag != 1) {
sb.append("凌晨");
}
} else if (endTime < dayStart2 + 43200000L) { // 今天12点前
if (periodFlag != 2) {
sb.append("上午");
}
} else {
if (periodFlag != 1) {
sb.append("下午");
}
}
sb.append(getSpecificTime(endTime));
}
}
return sb.toString();
}
//获取具体时间
public static String getSpecificTime(Long time) {
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm", Locale.getDefault());
return sdf.format(new Date(time));
}
/**
* 获得当日的时间搓(yyMMdd)
* 精确到日
*
* @return Integer
*/
public static Integer getCodeDate() {
return Integer.parseInt(DateFormatUtils.format(System.currentTimeMillis(), DateUtils.YYMMDD_FORMAT));
}
public static Integer getCodeDateYYYYMMDD() {
return Integer.parseInt(DateFormatUtils.format(System.currentTimeMillis(), DateUtils.YYYYMMDD_FORMAT));
}
/**
* 获得两个日期相差多少天
* 精确到日
*
* @return Integer
*/
public static Long getDiffDay(Long bigTime, Long smallTime) {
return (bigTime - smallTime) / ONE_DAY_MILLISECONDS;
}
}
/**
* 获取指定年、月份的最后一天
* @param year
* @param month
* @return
*/
public static Long getEndTimeOfMonth(Integer year,Integer month){
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
return cal.getTimeInMillis();
}
/**
* 获取指定年、月份的第一天
* @param year
* @param month
* @return
*/
public static Long getStartTimeOfMonth(Integer year,Integer month){
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month);
return cal.getTimeInMillis();
}
/**
* @MethodName dayForWeek
* @Description TODO 判断当前日期是星期几
* @return
*/
public static String dayForWeek(String pTime){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date tmpDate = null;
try {
tmpDate = format.parse(pTime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
try {
cal.setTime(tmpDate);
} catch (Exception e) {
e.printStackTrace();
}
int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
if (w < 0)
w = 0;
return weekDays[w];
}
/**
* 判断两个日期相隔天数
* @param startTime
* @param endTime
* @return
*/
public static Integer differentDaysByMillisecond(Long startTime,Long endTime){
return (int)((getStartTimeOfDay(endTime) - getStartTimeOfDay(startTime)) / ONE_DAY_MILLISECONDS);
}
/**
* @MethodName 获取当年的总周数
* @Description TODO
* @Param
* @return
*/
public static Integer getWeekCount(Long year) {
Calendar calendar = Calendar.getInstance();
calendar.set(Math.toIntExact(year), 2, 5);
calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
// calendar.setTimeInMillis(time);//获得时间戳
int weeksInWeekYear = calendar.getWeeksInWeekYear();
return weeksInWeekYear;
}
/**
* 获取本周开始时间
* @param time
* @return
*/
public static Long getBeginTimeOfWeek(Long time) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
if (dayofweek == 1) {
dayofweek += 7;
}
cal.add(Calendar.DATE, 2 - dayofweek);
return getStartTimeOfDay(cal.getTimeInMillis());
}
/**
* 获取上个月的最后一天0点0分0秒
* @return
*/
public static Long getLastMonthEndDay(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMaximum(Calendar.DATE));
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
/**
* 获取上个月的0点0分0秒
* @return
*/
public static Long getLastMonthStartDay(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
/**
* 获取后天10:30的时间 _____最新需求 由 十点半改成10点
* @param date
* @return
*/
public static Long getAfterTwoDay1030AM(Long date){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getStartTimeOfDay(date));
calendar.add(Calendar.DATE,2);
calendar.add(Calendar.HOUR_OF_DAY,10);
// calendar.add(Calendar.MINUTE,30);
return calendar.getTimeInMillis();
}
/**
* 获取当天上午十点时间
* @param date
* @return
*/
public static Long get10AM(Long date){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getStartTimeOfDay(date));
calendar.add(Calendar.DATE,0);
calendar.add(Calendar.HOUR_OF_DAY,10);
return calendar.getTimeInMillis();
}
/**
* 获取第二天上午十点时间
* @param date
* @return
*/
public static Long getTomorrow10AM(Long date){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getStartTimeOfDay(date));
calendar.add(Calendar.DATE,1);
calendar.add(Calendar.HOUR_OF_DAY,10);
return calendar.getTimeInMillis();
}
/**
* 获取某时间段内的每个日期
* @param startDate
* @param endDate
* @return
*/
public static List<Long> getPeriodDates(long startDate, long endDate) {
List<Long> date = new ArrayList<>();
if (startDate > endDate) {
return date;
}
Long start = getStartTimeOfDay(startDate);
Long end = getStartTimeOfDay(endDate);
date.add(start);
if (start.equals(end)) {
return date;
}
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(start);
for (;;) {
calendar.add(Calendar.DATE, 1);
start = calendar.getTimeInMillis();
date.add(start);
if (start.equals(end)) {
break;
}
}
return date;
}
/**
* 获取去年的时间戳
* @param date
* @return
*/
public static Long getLastYearTime(Long date){
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date);
cal.add(Calendar.YEAR, -1);
return cal.getTimeInMillis();
}
/**
* 获取字符串时间
* @param format 时间格式
* @param date 时间戳
* @return
*/
public static String getStrDate(Long date, String format) {
SimpleDateFormat df = new SimpleDateFormat(format);// 设置日期格式
return df.format(date);
}
/**
* 获取上周开始时间戳00:00:00
*
* @return
*/
public static Long getStartWeek() {
LocalDate d1 = LocalDate.now().minusWeeks(1).with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)).plusDays(1L);
return d1.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
}
/**
* 获取上周结束时间戳23:59:59
*
* @return
*/
public static Long getEndWeek() {
LocalDate d2 = LocalDate.now().minusWeeks(1).with(TemporalAdjusters.next(DayOfWeek.MONDAY)).minusDays(1L);
return getEndTimeOfDay(d2.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli());
}
/**
*判断当日是不是周一
*
*/
public static boolean isMonday(long timestamp) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
return dayOfWeek == Calendar.MONDAY;
}
/**
*判断当日是不是1号
*
*/
public static boolean isFirstOfMonth(long timestamp) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
return dayOfMonth == 1;
}
java时间工具类
于 2020-12-23 17:19:45 首次发布