package com.taipy.sc.common.util;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Year;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;
import java.util.*;
/**
* Created by apple on 2017/9/28.
*/
public class DatetimeUtil {
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
public static final String HH_MM_SS = "HH:mm:ss";
public static final String YYYYMMDD = "yyyyMMdd";
public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String MM_DD_YYYY = "MM-dd-yyyy";
public static final String YYYY_MM = "yyyy-MM";
public static final String MM_DD = "MM-dd";
public static final String MM_DD_HH_MM = "MM-dd HH:mm";
public static final String MM_DD_HH_MM_SS = "MM-dd HH:mm:ss";
public static final String MM_DD_HH_MM_SS_SSS = "MM-dd HH:mm:ss:SSS";
public static final String HH_MM = "HH:mm";
public static final String MM_DD_YYYY_ = "MM/dd/yyyy";
public static final String YYYY = "yyyy";
public static final String MM = "MM";
public static final String DD = "dd";
public static final String YYYY_YEAR_MM_MONTH_DD_DAY_HH_WHEN_MM_POINTS = "yyyy年MM月dd日 HH时mm分";
public static final String YYYY_YEAR_MM_MONTH_DD_DAY_HH_WHEN_MM_POINTS_SS = "yyyy年MM月dd日 HH时mm分ss秒";
public static final String MM_MONTH_DD_DAY_HH_WHEN_MM_POINTS = "MM月dd日 HH时mm分";
public static final String DD_DAY_HH_WHEN_MM_POINTS_SS = "dd日 HH时mm分ss秒";
public static final String MM_MONTH_DD_DAY_HH_WHEN_MM_POINTS_SS = "MM月dd日 HH时mm分ss秒";
/**
* 获取两个时间段的时间段值
* @return
*/
public static List<String> getTimePeriodFromTwoTime(String startYear, String endYear) {
LocalDate start1 = LocalDate.of(Integer.parseInt(startYear), 12, 1);
LocalDate end1 = LocalDate.of(Integer.parseInt(endYear), 5, 31);
long timstrap = start1.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
long endtime = end1.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
LocalDate start = Instant.ofEpochMilli(timstrap).atZone(ZoneOffset.ofHours(8)).toLocalDate();
LocalDate end = Instant.ofEpochMilli(endtime).atZone(ZoneOffset.ofHours(8)).toLocalDate();
List<String> result = new ArrayList<>();
// 年
Year startyear = Year.from(start);
Year endyear = Year.from(end);
// 包含最后一个时间
for (long i = 0; i <= ChronoUnit.YEARS.between(startyear, endyear); i++) {
result.add(startyear.plusYears(i).toString());
}
return result;
}
public static String getHSByStringTime(String time){
String format = DatetimeUtil.format(DatetimeUtil.parse(time), DatetimeUtil.HH_MM);
return format;
}
public static String getYMDByStringTime(String time){
String format = DatetimeUtil.format(DatetimeUtil.parse(time), DatetimeUtil.YYYY_MM_DD);
return format;
}
public static String getMDByStringTime(String time){
String format = DatetimeUtil.format(DatetimeUtil.parse(time), DatetimeUtil.MM_DD);
return format;
}
public static String getMDHSByStringTime(String time){
String format = DatetimeUtil.format(DatetimeUtil.parse(time), DatetimeUtil.MM_DD_HH_MM);
return format;
}
/**
* 获取去年今天
* @param date
* @return
*/
public static Date getLastYearDay(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, -1);
Date time = cal.getTime();
return time;
}
/*
* 一天的毫秒
*/
public static final long DAY_TO_MILLISECOND = 89999999;
public static final String YYYY_YEAR_MM_MONTH_DD_DAY = "yyyy年MM月dd日";
public static final String MM_MONTH_DD_DAY = "MM月dd日";
/**
* 保存两位小数
*/
public static double keep(double number) {
return Double.parseDouble(new DecimalFormat("#.##").format(number));
}
/**
* 获取当前时间
*
* @return
*/
public static Date getCurrentTime() {
return new Date();
}
public static int getDaysByDate(String yyyyMM) {
int days = 0;
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
Date date = simpleDateFormat.parse(yyyyMM);
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
} catch (Exception e) {
// e.printStackTrace();
}
return days;
}
/**
* 日期减去日期获取天数
* @param date1
* @param date2
* @return
*/
public static int differentDays(Date date1,Date date2)
{
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1= cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if(year1 != year2) //同一年
{
int timeDistance = 0 ;
for(int i = year1 ; i < year2 ; i ++)
{
if(i%4==0 && i%100!=0 || i%400==0) //闰年
{
timeDistance += 366;
}
else //不是闰年
{
timeDistance += 365;
}
}
return timeDistance + (day2-day1) ;
}
else //不同年
{
// System.out.println("判断day2 - day1 : " + (day2-day1));
return day2-day1;
}
}
/**
* Date转String YYYY-MM-DD 格式
* @param date
* @return
*/
public static String getStringByDate(Date date ){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowDate = simpleDateFormat.format(date);
return nowDate;
}
public static String getStringByDate2(Date date ){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String nowDate = simpleDateFormat.format(date);
return nowDate;
}
/**
* String 转 Date YYYY-MM-DD 格式
* @param date
* @return
*/
public static Date getDateByString(String date ) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = simpleDateFormat.parse(date);
return parse;
}
/**
* String 转 Date YYYY-MM-DD 格式
* @param date
* @return
*/
public static Date getDateByStringMMSS(String date ) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parse = simpleDateFormat.parse(date);
return parse;
}
/**
* 获取时间
*
* @param arg0
* @param date
* @return
*/
public static String getDate(String arg0, Date date) {
if (date != null) {
return new SimpleDateFormat(arg0).format(date);
}
return new SimpleDateFormat(arg0).format(new Date());
}
/**
* 用户传入时间格式的字符串(2-15-05-01), 返回当前时间的时间蹉
*
* @param val
* @return
*/
public static Date strConversionDate(String val, String form) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(form);
return sdf.parse(val);
} catch (Exception e) {
e.printStackTrace();
}
return getCurrentTime();
}
//------------------------------- 新加
public static final String datetimeStyle = "yyyy-MM-dd HH:mm:ss";
public static final String dateStyle = "yyyy-MM-dd";
public static final String dateStyleWithoutYear = "MM-dd";
public static final String datetimeStartWithMonthStyle = "MM-dd HH:mm";
public static final String datetimeWithoutSecondStyle = "yyyy-MM-dd HH:mm";
private static final int[] seasonFirstMonth = {0, 0, 0, 3, 3, 3, 6, 6, 6, 9, 9, 9};
private static final int[] seasonLastMonth = {2, 2, 2, 5, 5, 5, 8, 8, 8, 11, 11, 11};
/**
* 以周一作为一周开始 获取本周第一天
* */
public static Date getFirstDayInWeek(Date date, Locale locale) {
GregorianCalendar calendar = new GregorianCalendar(locale);
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.set(11, calendar.getActualMinimum(11));
calendar.set(12, calendar.getActualMinimum(12));
calendar.set(13, calendar.getActualMinimum(13));
calendar.set(14, 0);
return calendar.getTime();
}
/**
* 以周天作为一周开始 获取本周第一天
* */
public static Date getFirstDayInWeekForSunday(Date date, Locale locale) {
GregorianCalendar calendar = new GregorianCalendar(locale);
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
calendar.set(11, calendar.getActualMinimum(11));
calendar.set(12, calendar.getActualMinimum(12));
calendar.set(13, calendar.getActualMinimum(13));
calendar.set(14, 0);
return calendar.getTime();
}
/**
* 以周天作为一周开始 获取本周第一天
* */
public static Date getFirstDayInWeekForSunday(Date date) {
return getFirstDayInWeekForSunday(date, Locale.getDefault());
}
/**
* 以周一作为一周开始 获取本周第一天
* */
public static Date getFirstDayInWeek(Date date) {
return getFirstDayInWeek(date, Locale.getDefault());
}
/**
* 以周一作为一周开始 获取本周最后一天
* */
public static Date getLastDayInWeek(Date date, Locale locale) {
GregorianCalendar calendar = new GregorianCalendar(locale);
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
calendar.set(11, calendar.getActualMaximum(11));
calendar.set(12, calendar.getActualMaximum(12));
calendar.set(13, calendar.getActualMaximum(13));
calendar.set(14, 0);
return calendar.getTime();
}
/**
* 以周天作为一周开始 获取本周最后一天
* */
public static Date getLastDayInWeekForSunday(Date date, Locale locale) {
GregorianCalendar calendar = new GregorianCalendar(locale);
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
calendar.set(11, calendar.getActualMaximum(11));
calendar.set(12, calendar.getActualMaximum(12));
calendar.set(13, calendar.getActualMaximum(13));
calendar.set(14, 0);
return calendar.getTime();
}
/**
* 以周一作为一周开始 获取本周最后一天
* */
public static Date getLastDayInWeek(Date date) {
return getLastDayInWeek(date, Locale.getDefault());
}
/**
* 以周天作为一周开始 获取本周最后一天
* */
public static Date getLastDayInWeekForSunday(Date date) {
return getLastDayInWeekForSunday(date, Locale.getDefault());
}
public static Date getFirstDayInMonth(Date date) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
int day = calendar.getActualMinimum(5);
calendar.set(5, day);
calendar.set(11, calendar.getActualMinimum(11));
calendar.set(12, calendar.getActualMinimum(12));
calendar.set(13, calendar.getActualMinimum(13));
calendar.set(14, 0);
return calendar.getTime();
}
public static Date getLastDayInMonth(Date date) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
int day = calendar.getActualMaximum(5);
calendar.set(5, day);
calendar.set(11, calendar.getActualMaximum(11));
calendar.set(12, calendar.getActualMaximum(12));
calendar.set(13, calendar.getActualMaximum(13));
calendar.set(14, 0);
return calendar.getTime();
}
public static Date getFirstDayInSeason(Date date) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
int currentMonth = calendar.get(2);
calendar.set(2, seasonFirstMonth[currentMonth]);
calendar.set(11, calendar.getActualMinimum(11));
calendar.set(12, calendar.getActualMinimum(12));
calendar.set(13, calendar.getActualMinimum(13));
calendar.set(14, 0);
return getFirstDayInMonth(calendar.getTime());
}
public static Date getLastDayInSeason(Date date) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
int currentMonth = calendar.get(2);
calendar.set(2, seasonLastMonth[currentMonth]);
calendar.set(11, calendar.getActualMaximum(11));
calendar.set(12, calendar.getActualMaximum(12));
calendar.set(13, calendar.getActualMaximum(13));
calendar.set(14, 0);
return getLastDayInMonth(calendar.getTime());
}
public static Date getFirstDayInYear(Date date) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(2, calendar.getActualMinimum(2));
calendar.set(11, calendar.getActualMinimum(11));
calendar.set(12, calendar.getActualMinimum(12));
calendar.set(13, calendar.getActualMinimum(13));
calendar.set(14, 0);
return getFirstDayInMonth(calendar.getTime());
}
public static Date getLastDayInYear(Date date) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(2, calendar.getActualMaximum(2));
calendar.set(11, calendar.getActualMaximum(11));
calendar.set(12, calendar.getActualMaximum(12));
calendar.set(13, calendar.getActualMaximum(13));
calendar.set(14, 0);
return getLastDayInMonth(calendar.getTime());
}
public static Date getTodayFirstTime() {
Calendar calendar = new GregorianCalendar();
calendar.set(11, calendar.getActualMinimum(11));
calendar.set(12, calendar.getActualMinimum(12));
calendar.set(13, calendar.getActualMinimum(13));
calendar.set(14, 0);
return calendar.getTime();
}
public static Date getTodayFirstTime(Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(11, calendar.getActualMinimum(11));
calendar.set(12, calendar.getActualMinimum(12));
calendar.set(13, calendar.getActualMinimum(13));
calendar.set(14, 0);
return calendar.getTime();
}
public static Date getTodayFirstTime(String dateStr) {
return getTodayFirstTime(parse(dateStr, "yyyy-MM-dd"));
}
public static Date getTodayLastTime() {
Calendar calendar = new GregorianCalendar();
calendar.set(11, calendar.getActualMaximum(11));
calendar.set(12, calendar.getActualMaximum(12));
calendar.set(13, calendar.getActualMaximum(13));
calendar.set(14, 0);
return calendar.getTime();
}
public static Date getTodayLastTime(Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(11, calendar.getActualMaximum(11));
calendar.set(12, calendar.getActualMaximum(12));
calendar.set(13, calendar.getActualMaximum(13));
calendar.set(14, 0);
return calendar.getTime();
}
public static Date getTodayLastTime(String dateStr) {
return getTodayLastTime(parse(dateStr, "yyyy-MM-dd"));
}
public static String formatDatetime(Date datetime) {
return format(datetime, "yyyy-MM-dd HH:mm:ss");
}
public static String formatDatetimeWithoutSecond(Date datetime) {
return format(datetime, "yyyy-MM-dd HH:mm");
}
public static String formatDate(Date date) {
if (date == null) {
return null;
}
return format(date, "yyyy-MM-dd");
}
public static String format(Date date, String pattern) {
if (date == null) {
return null;
}
TimeZone timeZone = TimeZone.getDefault();
return DateFormatUtils.format(date, pattern, timeZone);
}
public static String format(Date date, String pattern, Locale locale) {
if (date == null) {
return null;
}
return DateFormatUtils.format(date, pattern, locale);
}
public static String format(Date date, String pattern, TimeZone timeZone) {
if (date == null) {
return null;
}
return DateFormatUtils.format(date, pattern, timeZone);
}
public static String format(Date date, String pattern, TimeZone zone,
Locale locale) {
if (date == null) {
return null;
}
return DateFormatUtils.format(date, pattern, zone, locale);
}
public static String formatDateOrDatetime(Date date) {
if (date == null) {
return null;
}
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
if ((calendar.get(11) == 0) && (calendar.get(12) == 0)
&& (calendar.get(13) == 0) && (calendar.get(14) == 0)) {
return formatDate(date);
}
return formatDatetime(date);
}
public static Date parseDatetime(String datetime) {
return parse(datetime, null, "yyyy-MM-dd HH:mm:ss");
}
public static Date parseDate(String date) {
return parse(date, null, "yyyy-MM-dd");
}
public static Date parseDatetimeWithoutSecond(String date) {
return parse(date, null, "yyyy-MM-dd HH:mm");
}
public static Date parse(String dateStr) {
return parse(dateStr, null, null);
}
public static Date parse(String dateStr, TimeZone timeZone) {
return parse(dateStr, timeZone, null);
}
public static Date parse(String dateStr, String pattern) {
return parse(dateStr, null, pattern);
}
public static Date parse(String dateStr, TimeZone timeZone, String pattern) {
if (StringUtils.isBlank(dateStr)) {
return null;
}
String[] parsePatterns = (String[]) null;
if (StringUtils.isNotBlank(pattern)) {
parsePatterns = new String[]{pattern, "yyyy-MM-dd",
"yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss"};
} else {
parsePatterns = new String[]{"yyyy-MM-dd", "yyyy-MM-dd HH:mm",
"yyyy-MM-dd HH:mm:ss"};
}
try {
SimpleDateFormat parser = null;
ParsePosition pos = new ParsePosition(0);
for (int i = 0; i < parsePatterns.length; ++i) {
parser = new SimpleDateFormat(parsePatterns[i]);
parser.applyPattern(parsePatterns[i]);
if (timeZone != null) {
parser.setTimeZone(timeZone);
}
pos.setIndex(0);
Date date = parser.parse(dateStr, pos);
if ((date != null) && (pos.getIndex() == dateStr.length())) {
return date;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Date addSecond(Date date, int amount) {
return add(date, 13, amount);
}
public static Date addMinute(Date date, int amount) {
return add(date, 12, amount);
}
public static Date addHour(Date date, int amount) {
return add(date, 11, amount);
}
public static Date addDate(Date date, int amount) {
return add(date, 5, amount);
}
public static Date addMonth(Date date, int amount) {
return add(date, 2, amount);
}
public static Date addYear(Date date, int amount) {
return add(date, 1, amount);
}
private static Date add(Date date, int field, int amount) {
if (amount == 0) {
return date;
}
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(field, amount);
return calendar.getTime();
}
public static boolean between(Date checkupDate, Date startDate,
Date endDate, boolean isIncludeBorderline) {
if (!(startDate.before(endDate))) {
Date temp = startDate;
startDate = endDate;
endDate = temp;
}
if ((checkupDate.after(startDate)) && (checkupDate.before(endDate))) {
return true;
}
return ((isIncludeBorderline) && (((checkupDate.equals(startDate)) || (checkupDate
.equals(endDate)))));
}
public static boolean checkOverup(Date startDate1, Date endDate1,
Date startDate2, Date endDate2, boolean allowIncludeBorderline) {
if (!(startDate1.before(endDate1))) {
Date temp = startDate1;
startDate1 = endDate1;
endDate1 = temp;
}
if (!(startDate2.before(endDate2))) {
Date temp = startDate2;
startDate2 = endDate2;
endDate2 = temp;
}
if ((endDate1.before(startDate2)) || (endDate2.before(startDate1))) {
return false;
}
return ((!(allowIncludeBorderline)) || ((!(endDate1.equals(startDate2))) && (!(endDate2
.equals(startDate1)))));
}
public static Date getNextPeriodMinute(Date date, int period,
boolean clearSecond) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
if (clearSecond) {
calendar.set(13, calendar.getActualMaximum(13));
}
int minute = calendar.get(12);
int newMinute = 0;
int i = 0;
do
newMinute = i++ * period;
while (newMinute <= minute);
int amount = newMinute - minute;
calendar.add(12, amount);
return calendar.getTime();
}
public static Date conversionToServerDate(Date localDate, TimeZone localZone) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(localDate);
int amount = TimeZone.getDefault().getRawOffset() - localZone.getRawOffset();
calendar.add(14, amount);
return calendar.getTime();
}
public static long minusDay(Date theDay, Date otherDay) {
long minusDay = theDay.getTime() - otherDay.getTime();
return (minusDay / 86400000L);
}
public static long[] detailInterval(Date theDay, Date otherDay) {
if (otherDay == null) {
return null;
}
long seconds = (otherDay.getTime() - theDay.getTime()) / 1000L;
long date = seconds / 86400L;
long hour = (seconds - (date * 24L * 60L * 60L)) / 3600L;
long minut = (seconds - (date * 24L * 60L * 60L) - (hour * 60L * 60L)) / 60L;
long second = seconds - (date * 24L * 60L * 60L) - (hour * 60L * 60L) - (minut * 60L);
return new long[]{date, hour, minut, second};
}
public static long[] formatLongToTimeStr(long millisecond) {
long seconds = millisecond / 1000L;
long date = seconds / 86400L;
long hour = (seconds - (date * 24L * 60L * 60L)) / 3600L;
long minut = (seconds - (date * 24L * 60L * 60L) - (hour * 60L * 60L)) / 60L;
long second = seconds - (date * 24L * 60L * 60L) - (hour * 60L * 60L) - (minut * 60L);
return new long[]{date, hour, minut, second};
}
/**
* 显示几天前等
*/
public static String reasoningDescribe(Date time) {
if (time == null)
return "";
Date now = new Date();
if (now.getTime() > time.getTime()) {//xx前
long d = now.getTime() - time.getTime();
if (d < 1000l * 60) {
return "刚刚";
} else if (d < 1000l * 60 * 60) {
return d / (1000l * 60) + "分钟前";
} else if (d < 1000l * 60 * 60 * 24) {
return d / (1000l * 60 * 60) + "小时前";
} else if (d < 1000l * 60 * 60 * 24 * 365) {
return d / (1000l * 60 * 60 * 24) + "天前";
} else {
return "一年前";
}
} else {//xx后
long d = time.getTime() - now.getTime();
if (d < 1000l * 60) {
return "刚刚";
} else if (d < 1000l * 60 * 60) {
return d / (1000l * 60) + "分钟后";
} else if (d < 1000l * 60 * 60 * 24) {
return d / (1000l * 60 * 60) + "小时后";
} else if (d < 1000l * 60 * 60 * 24 * 365) {
return d / (1000l * 60 * 60 * 24) + "天后";
} else {
return "一年后";
}
}
}
/**
* 根据时间戳,返回时间格式
*/
public static Date getFormatDate(long timestemp, String format) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
String d = simpleDateFormat.format(timestemp);
Date date = null;
try {
date = simpleDateFormat.parse(d);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static Date now(long time) {
return new Date(time);
}
/**
* 设置该时间到23点59分59秒
*
* @param dateTime
* @return
*/
public static Date getLastTimeByDate(Date dateTime) {
Calendar calendar = Calendar.getInstance();
if (dateTime == null) {
calendar.setTime(new Date());
} else {
calendar.setTime(dateTime);
}
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 99);
return calendar.getTime();
}
public static Date getNewLastTimeByDate(Date dateTime) {
Calendar calendar = Calendar.getInstance();
if (dateTime == null) {
calendar.setTime(new Date());
} else {
calendar.setTime(dateTime);
}
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 设置该时间到0点0分0秒
*
* @param dateTime
* @return
*/
public static Date getFirstTimeByDate(Date dateTime) {
Calendar calendar = Calendar.getInstance();
if (dateTime == null) {
calendar.setTime(new Date());
} else {
calendar.setTime(dateTime);
}
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 根据月份获取当月的最后一天
*
* @param datetime
* @return
*/
public static Date getDateLastDayToMonth(String datetime) {
Calendar calendar = Calendar.getInstance();
if (StringUtils.isBlank(datetime)) {
calendar.setTime(new Date());
} else {
calendar.setTime(DatetimeUtil.parse(datetime));
}
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 99);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
return calendar.getTime();
}
/**
* 根据月份获取当月的最后一天
*
* @param datetime
* @return
*/
public static Date getDateLastDayToMonth(Date datetime) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(datetime);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 99);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
return calendar.getTime();
}
/**
* 设置该月的第一天
*
* @param datetime
* @return
*/
public static Date getDateFirstDayToMonth(String datetime) {
Calendar calendar = Calendar.getInstance();
if (StringUtils.isBlank(datetime)) {
calendar.setTime(new Date());
} else {
calendar.setTime(DatetimeUtil.parse(datetime));
}
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
/**
* 设置该月的第一天
*
* @param datetime
* @return
*/
public static Date getDateFirstDayToMonth(Date datetime) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(datetime);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}
/**
* 根据传入的时间获取下个月的第一天
* @param date
* @return
*/
public static Date getDateByLastMonthOfFirst(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 1);
return calendar.getTime();
}
/**
* 获取00:00:00 -- 23:59:59时间段
*
* @return
*/
public static String[] getTimeQuantumByDay() {
String[] dates = new String[13];
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String str = "00:00:00";
Calendar rightNow = Calendar.getInstance();
for (int i = 0; i < 12; i++) {
dates[i] = str;
Date dt = null;
try {
dt = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
rightNow.setTime(dt);
rightNow.add(Calendar.HOUR, 2);
Date dt1 = rightNow.getTime();
str = dt1.toString().substring(11, 19);
}
dates[12] = "24:00:00";
return dates;
}
/**
* 日期转换
*
* @param dateTime
* @param str 格式00:00
* @return
*/
public static Date convertDate(Date dateTime, String str) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateTime);
int hour = Integer.parseInt(str.substring(0, 2));
int minute = Integer.parseInt(str.substring(3, 5));
int second = Integer.parseInt(str.substring(6, 8));
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
return calendar.getTime();
}
/**
* 获取过去第几天的日期
*
* @param past
* @return
*/
public static String getPastDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String result = format.format(today);
return result;
}
/**
* 获取最近一个月开始日期
*/
public static Date getNearDate2now(String type, int num) {
SimpleDateFormat format = new SimpleDateFormat(DatetimeUtil.YYYY_MM_DD_HH_MM_SS);
Calendar c = Calendar.getInstance();
if (StringUtils.equals(type, "day")) {
return getNearMonthDate(format, c, num);
}
if (StringUtils.equals(type, "month")) {
return getNearMonthDate(format, c, num);
}
if (StringUtils.equals(type, "year")) {
return getNearMonthDate(format, c, num);
}
return new Date();
}
private static Date getNearDayDate(SimpleDateFormat format, Calendar c, int num) {
//过去num天
c.setTime(new Date());
c.add(Calendar.DATE, -num);
Date d = c.getTime();
// String day = format.format(d);
return d;
}
private static Date getNearMonthDate(SimpleDateFormat format, Calendar c, int num) {
//过去num月
c.setTime(new Date());
c.add(Calendar.MONTH, -num);
Date m = c.getTime();
// String mon = format.format(m);
return m;
}
private static Date getNearYearDate(SimpleDateFormat format, Calendar c, int num) {
//过去num年
c.setTime(new Date());
c.add(Calendar.YEAR, -num);
Date y = c.getTime();
// String year = format.format(y);
return y;
}
/**
* 将时间转换成秒
*
* @param time
* @return
*/
public static long getSecondByTime(String time) {
if (StringUtils.isBlank(time)) {
return 0L;
}
String[] split = time.split(":");
if (split == null || split.length <= 0) {
return 0L;
}
if (StringUtils.isBlank(split[0]) || StringUtils.isBlank(split[1])) {
return 0L;
}
return Integer.parseInt(split[0]) * 3600 + Integer.parseInt(split[1]) * 60;
}
/**
* 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
*
*
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
public static boolean hourMinuteBetween(Date nowTime, Date startTime, Date endTime) {
if (nowTime == null) {
return false;
}
if (nowTime.getTime() == startTime.getTime() || nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}
/**
* 计算两个时间段相差的分
*
* @param startTime
* @param endTime
* @return
*/
public static int calLastedTime(Date startTime, Date endTime) {
if (ObjectUtils.isEmpty(startTime) || ObjectUtils.isEmpty(endTime)) return 0;
return (int) (endTime.getTime() - startTime.getTime()) / 60000;
}
/**
* 设置时间
*/
public static Date setDateFormat(Date dataYMD, Date dateHMS) {
Calendar startDate = Calendar.getInstance();
startDate.setTime(dateHMS);
Calendar toDayDate = Calendar.getInstance();
toDayDate.setTime(dataYMD);
Calendar c = Calendar.getInstance();
c.set(toDayDate.get(Calendar.YEAR), toDayDate.get(Calendar.MONTH), toDayDate.get(Calendar.DATE), startDate.get(Calendar.HOUR_OF_DAY), startDate.get(Calendar.MINUTE), startDate.get(Calendar.SECOND)); // 设置当天晚上8点整
return c.getTime();
}
public static Date birthConversion(Integer age, boolean flag) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
if (flag) age = age + 1;
calendar.add(Calendar.YEAR, -age);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/*public static void main(String[] args) throws ParseException {
System.out.println(new SimpleDateFormat(DatetimeUtil.YYYY_MM_DD).format(birthConversion(24)));
}*/
}
史上最全的DatetimeUtil,java操作Date工具类
于 2022-11-18 10:57:22 首次发布