代码可以借鉴,转发请标明出处,不可直接盗用发表。
很多新手可能会遇到开发中需要去各种方式的调用时间,为了方便大家,我直接把写好的时间Util提供大家参考,有不当之处不吝赐教。
import org.apache.commons.lang.time.DateFormatUtils;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
// 日期工具类
public class DateUtil {
// 年
public static String DATE_YYYY = "yyyy";
// 年月日
public static String DATE_YYYYMMDD = "yyyyMMdd";
// 格式化年月日
public static String DATE_YYYY_MM_DD = "yyyy-MM-dd";
// 年月日时分秒
public static String DATE_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
// 年月日时分秒毫秒
public static String DATE_YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";
// 格式化年月日时分秒
public static String DATE_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
// 格式化年月日时分秒毫秒
public static String DATE_YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS";
// 格式化年月日时分
public static String DATE_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
public static SimpleDateFormat sdf = new SimpleDateFormat();
public static Calendar calendar = Calendar.getInstance();
// 日期格式
public static SimpleDateFormat getSimpleDateFormat(String dateForm) {
sdf.applyPattern(dateForm);
return sdf;
}
// 获取指定格式的日期
public static String getDate(String pattern) {
return DateFormatUtils.format(Calendar.getInstance().getTime(), pattern);
}
// 时间字符转日期
public static Date strToDate(String date) {
try {
if (StringUtils.isNotEmpty(date)) {
if (date.contains(":")) {
return DateForm(DateUtil.DATE_YYYY_MM_DD_HH_MM_SS, date);
} else {
return DateForm(DateUtil.DATE_YYYY_MM_DD, date);
}
} else {
return null;
}
} catch (ParseException e) {
return null;
}
}
// 根据时间字符串和时间格式 转化时间
public static Date DateForm(String form, String date) throws ParseException {
return getSimpleDateFormat(form).parse(date);
}
// 根据时间格式获取当前时间
public static Date getCurrentDate(SimpleDateFormat sdf) throws ParseException {
String date = getCurrentDateStr(sdf);
return sdf.parse(date);
}
// 根据时间格式返回当前时间的字符串格式
public static String getCurrentDateStr(SimpleDateFormat sdf) {
return sdf.format(new Date());
}
// 格式化指定格式的 LocalDateTime
public static String formLocalDateTime(LocalDateTime ldt, String dateForm) {
DateTimeFormatter dtfm = DateTimeFormatter.ofPattern(dateForm);
return dtfm.format(ldt);
}
// 根据字符日期转 LocalDateTime
public static LocalDateTime formLocalDateTime(String date, String dateForm) {
DateTimeFormatter dtfm = DateTimeFormatter.ofPattern(dateForm);
return LocalDateTime.parse(date, dtfm);
}
public static Long getMilliSecond(LocalDateTime ldt) {
return ldt.toInstant(ZoneOffset.of("+8")).toEpochMilli();
}
// 获取秒
public static Long getSecond(LocalDateTime ldt) {
return ldt.toEpochSecond(ZoneOffset.of("+8"));
}
// 给定日期计算多少天后的日期
public static Date computeDate(Date date, int days) {
Lock lock = new ReentrantLock();
lock.lock();
try {
calendar.setTime(date);
calendar.add(Calendar.DATE, days);
return calendar.getTime();
} finally {
lock.unlock();
}
}
// LocalDateTime 转 Date
public static Date ldtToDate(LocalDateTime ldt) {
return Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
}
//获取当前默认的字符日期
public static String current() {
return getCurrentDateStr(getSimpleDateFormat(DateUtil.DATE_YYYYMMDDHHMMSS));
}
public static Date parseShortDate(String p_date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(p_date);
} catch (Exception var3) {
return null;
}
}
public static Date parseLongDate(String p_date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return sdf.parse(p_date);
} catch (Exception var3) {
return null;
}
}
public static String formatLongDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
public static String formatLongTimestamp(Timestamp timeStamp) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(timeStamp.getTime());
return sdf.format(date);
}
public static String formatShortTime(Date date) {
if (date == null) {
return "";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
}
public static Date DateformatShortDateTime(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD);
String a = sdf.format(date);
try {
return sdf.parse(a);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
// date转string 年月日 时分秒
public static String formatTime(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD_HH_MM_SS);
return sdf.format(date);
}
/**
* 获取当前日期的下周一到下周日的所有日期集合
*
* @return
*/
public static List getNextWeekDateList() {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(new Date());
// 将时分秒,毫秒域清零
cal1.set(Calendar.HOUR_OF_DAY, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
cal2.setTime(new Date());
// 将时分秒,毫秒域清零
cal2.set(Calendar.HOUR_OF_DAY, 0);
cal2.set(Calendar.MINUTE, 0);
cal2.set(Calendar.SECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);
// 获得当前日期是一个星期的第几天
int dayWeek = cal1.get(Calendar.DAY_OF_WEEK);
if (dayWeek == 1) {
cal1.add(Calendar.DAY_OF_MONTH, 1);
cal2.add(Calendar.DAY_OF_MONTH, 7);
} else {
cal1.add(Calendar.DAY_OF_MONTH, 1 - dayWeek + 8);
cal2.add(Calendar.DAY_OF_MONTH, 1 - dayWeek + 14);
}
Calendar cStart = Calendar.getInstance();
cStart.setTime(cal1.getTime());
List dateList = new ArrayList();
//别忘了,把起始日期加上
dateList.add(cal1.getTime());
// 此日期是否在指定日期之后
while (cal2.getTime().after(cStart.getTime())) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
cStart.add(Calendar.DAY_OF_MONTH, 1);
dateList.add(cStart.getTime());
}
//设置周末的时分秒为23:59:59:999
Date oldSunday = (Date) dateList.get(6);
Calendar cal3 = Calendar.getInstance();
cal3.setTime(oldSunday);
// 将时分秒,毫秒域清零
cal3.set(Calendar.HOUR_OF_DAY, 23);
cal3.set(Calendar.MINUTE, 59);
cal3.set(Calendar.SECOND, 59);
cal3.set(Calendar.MILLISECOND, 999);
Date newSunday = cal3.getTime();
dateList.add(newSunday);
return dateList;
}
// 获取当天开始时间
public static Date getDayStartTime() {
Calendar start = Calendar.getInstance();
start.set(Calendar.HOUR_OF_DAY, 00);
start.set(Calendar.MINUTE, 0);
start.set(Calendar.SECOND, 0);
SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return DateUtil.strToDate(sm.format(start.getTime()));
}
// 获取当天结束时间
public static Date getDayEndTime() {
Calendar end = Calendar.getInstance();
end.set(Calendar.HOUR_OF_DAY, 23);
end.set(Calendar.MINUTE, 59);
end.set(Calendar.SECOND, 59);
SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return DateUtil.strToDate(sm.format(end.getTime()));
}
// 时间字符转日期, 年月日 时分
public static Date strToDateNoSecond(String date) {
try {
if (StringUtils.isNotEmpty(date)) {
return DateForm(DateUtil.DATE_YYYY_MM_DD_HH_MM, date);
} else {
return null;
}
} catch (ParseException e) {
return null;
}
}
// 获取指定开始时间至结束时间的天数集合
public static List<String> getDateList(String beginDate, String endDate) {
List<String> dateList = new ArrayList<>();
try {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD);
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(beginDate));
for (long d = cal.getTimeInMillis(); d <= sdf.parse(endDate).getTime(); d = getNextDay(cal)) {
dateList.add(sdf.format(d));
}
} catch (ParseException e) {
return dateList;
}
return dateList;
}
private static long getNextDay(Calendar c) {
c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
return c.getTimeInMillis();
}
// 获得当前时间是今年的第几周
public static int getWhatWeekByCurrentTime(Date date) {
//获取一个Calendar对象
Calendar calendar = Calendar.getInstance();
//设置星期一为一周开始的第一天
calendar.setFirstDayOfWeek(Calendar.MONDAY);
//设置在一年中第一个星期所需最少天数
calendar.setMinimalDaysInFirstWeek(4);
calendar.setTime(date);
return calendar.get(Calendar.WEEK_OF_YEAR);
}
// 获得当前时间的某年某月(例如2022年10月)
public static String getYearAndMonth(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月");
return sdf.format(date);
}
// 获得当前时间的某年(例如2022年)
public static String getYear(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY");
return sdf.format(date);
}
// 获得当前时间的月.日
public static String getMonthAndDay(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("MM.dd");
return sdf.format(date);
}
public static void main(String[] args) {
//获取一个Calendar对象
Calendar calendar = Calendar.getInstance();
//设置星期一为一周开始的第一天
calendar.setFirstDayOfWeek(Calendar.MONDAY);
//设置在一年中第一个星期所需最少天数
calendar.setMinimalDaysInFirstWeek(4);
//格式化日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = null;
try {
parse = simpleDateFormat.parse("2022-01-03");
} catch (ParseException e) {
e.printStackTrace();
}
calendar.setTime(parse);
int weekOfYear1 = calendar.get(Calendar.WEEK_OF_YEAR);
System.out.println(weekOfYear1 + "周");
}
// 获得本周一与当前日期相差的天数
public static int getMondayPlus() {
Calendar cd = Calendar.getInstance();
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
//由于Calendar提供的都是以星期日作为周一的开始时间
if (dayOfWeek == 1) {
return -6;
} else {
return 2 - dayOfWeek;
}
}
// 获得当前周,周一的日期
public static Date getCurrentMonday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
return monday;
}
// 获得当前周,周日的日期
public static Date getPreviousSunday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 6);
Date monday = currentDate.getTime();
return monday;
}
/**
* 获取下周一时间
*/
public static Date getNextWeekMonday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);
Date monday = currentDate.getTime();
return monday;
}
/**
* 获取下周日时间
*/
public static Date getNextWeekSunday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 13);
Date monday = currentDate.getTime();
return monday;
}
/**
* 获取本月初第一天时间
* @param date
* @return
*/
public static Date getBeginDayOfMonth(Date date) {
GregorianCalendar currentDate = (GregorianCalendar) Calendar.getInstance();
currentDate.setTime(date);
//设置为第一天
currentDate.set(Calendar.DAY_OF_MONTH, 1);
Date monthOne = currentDate.getTime();
return monthOne;
}
/**
* 获取本月的结束时间
*
* @return
*/
public static Date getEndDayOfMonth() {
//获取Calendar
Calendar calendar = Calendar.getInstance();
//设置日期为本月最大日期
calendar.set(Calendar.DATE, calendar.getActualMaximum(calendar.DATE));
return calendar.getTime();
}
/**
* 获取String类型的年月日十分时间
*
* @return
*/
public static String getStringFormateDate() {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD_HH_MM);
String date = sdf.format(Calendar.getInstance().getTime());
return date;
}
/**
* 获取String类型日期
*
* @param time
* @param pattern
* @return
*/
public static String getDateFormateToString(Date time, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(time);
}
/**
* 两个日期的时长(hh小时mm分)
*
* @param time1
* @param time2
* @return
*/
public static String getTwoTimeDuration(Date time1, Date time2) {
StringBuffer durationsbf = new StringBuffer();
//两时间相差多少秒
long betweenSecond = (time1.getTime() - time2.getTime())/1000;
//两时间相差的小时
long hour=betweenSecond%(24*3600)/3600;
//两时间相差的分
long minute = betweenSecond%3600/60;
return durationsbf.append(hour).append("小时").append(minute).append("分").toString();
}
/**
* 获得当前时间的年月日
*
* @param date
* @return
*/
public static String getYearAndMonthAndDay(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD);
return sdf.format(date);
}
}