package org.jeecg.common.util;
|
|
import java.beans.PropertyEditorSupport;
|
import java.sql.Timestamp;
|
import java.text.DateFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.GregorianCalendar;
|
|
import org.springframework.util.StringUtils;
|
|
/**
|
* 类描述:时间操作定义类
|
*
|
* @Author: 张代浩
|
* @Date:2012-12-8 12:15:03
|
* @Version 1.0
|
*/
|
public class DateUtils extends PropertyEditorSupport {
|
|
public static ThreadLocal<SimpleDateFormat> date_sdf = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("yyyy-MM-dd");
|
}
|
};
|
|
public static ThreadLocal<SimpleDateFormat> date_year = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("yyyy");
|
}
|
};
|
|
public static ThreadLocal<SimpleDateFormat> date_month = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("MM");
|
}
|
};
|
|
public static ThreadLocal<SimpleDateFormat> yyyyMMdd = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("yyyyMMdd");
|
}
|
};
|
public static ThreadLocal<SimpleDateFormat> date_sdf_wz = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("yyyy年MM月dd日");
|
}
|
};
|
public static ThreadLocal<SimpleDateFormat> time_sdf = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
}
|
};
|
public static ThreadLocal<SimpleDateFormat> yyyymmddhhmmss = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("yyyyMMddHHmmss");
|
}
|
};
|
public static ThreadLocal<SimpleDateFormat> short_time_sdf = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("HH:mm");
|
}
|
};
|
public static ThreadLocal<SimpleDateFormat> datetimeFormat = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
}
|
};
|
public static ThreadLocal<SimpleDateFormat> timeFormat = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("HHmmss");
|
}
|
};
|
public static ThreadLocal<SimpleDateFormat> monDayFormat = new ThreadLocal<SimpleDateFormat>() {
|
@Override
|
protected SimpleDateFormat initialValue() {
|
return new SimpleDateFormat("MM月dd日");
|
}
|
};
|
|
|
// 以毫秒表示的时间
|
private static final long DAY_IN_MILLIS = 24 * 3600 * 1000;
|
private static final long HOUR_IN_MILLIS = 3600 * 1000;
|
private static final long MINUTE_IN_MILLIS = 60 * 1000;
|
private static final long SECOND_IN_MILLIS = 1000;
|
|
// 指定模式的时间格式
|
private static SimpleDateFormat getSDFormat(String pattern) {
|
return new SimpleDateFormat(pattern);
|
}
|
|
/**
|
* 当前日历,这里用中国时间表示
|
*
|
* @return 以当地时区表示的系统当前日历
|
*/
|
public static Calendar getCalendar() {
|
return Calendar.getInstance();
|
}
|
|
/**
|
* 指定毫秒数表示的日历
|
*
|
* @param millis 毫秒数
|
* @return 指定毫秒数表示的日历
|
*/
|
public static Calendar getCalendar(long millis) {
|
Calendar cal = Calendar.getInstance();
|
// --------------------cal.setTimeInMillis(millis);
|
cal.setTime(new Date(millis));
|
return cal;
|
}
|
|
// ////////////////////////////////////////////////////////////////////////////
|
// getDate
|
// 各种方式获取的Date
|
// ////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 当前日期
|
*
|
* @return 系统当前时间
|
*/
|
public static Date getDate() {
|
return new Date();
|
}
|
|
/**
|
* 指定毫秒数表示的日期
|
*
|
* @param millis 毫秒数
|
* @return 指定毫秒数表示的日期
|
*/
|
public static Date getDate(long millis) {
|
return new Date(millis);
|
}
|
|
/**
|
* 时间戳转换为字符串
|
*
|
* @param time
|
* @return
|
*/
|
public static String timestamptoStr(Timestamp time) {
|
Date date = null;
|
if (null != time) {
|
date = new Date(time.getTime());
|
}
|
return date2Str(date_sdf.get());
|
}
|
|
/**
|
* 字符串转换时间戳
|
*
|
* @param str
|
* @return
|
*/
|
public static Timestamp str2Timestamp(String str) {
|
Date date = str2Date(str, date_sdf.get());
|
return new Timestamp(date.getTime());
|
}
|
|
/**
|
* 字符串转换成日期
|
*
|
* @param str
|
* @param sdf
|
* @return
|
*/
|
public static Date str2Date(String str, SimpleDateFormat sdf) {
|
if (null == str || "".equals(str)) {
|
return null;
|
}
|
Date date = null;
|
try {
|
date = sdf.parse(str);
|
return date;
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 日期转换为字符串
|
*
|
* @param date_sdf 日期格式
|
* @return 字符串
|
*/
|
public static String date2Str(SimpleDateFormat date_sdf) {
|
Date date = getDate();
|
if (null == date) {
|
return null;
|
}
|
return date_sdf.format(date);
|
}
|
|
/**
|
* 格式化时间
|
*
|
* @param date
|
* @param format
|
* @return
|
*/
|
public static String dateformat(String date, String format) {
|
SimpleDateFormat sformat = new SimpleDateFormat(format);
|
Date _date = null;
|
try {
|
_date = sformat.parse(date);
|
} catch (ParseException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
return sformat.format(_date);
|
}
|
|
/**
|
* 日期转换为字符串
|
*
|
* @param date 日期
|
* @param date_sdf 日期格式
|
* @return 字符串
|
*/
|
public static String date2Str(Date date, SimpleDateFormat date_sdf) {
|
if (null == date) {
|
return null;
|
}
|
return date_sdf.format(date);
|
}
|
|
/**
|
* 日期转换为字符串
|
*
|
* @param format 日期格式
|
* @return 字符串
|
*/
|
public static String getDate(String format) {
|
Date date = new Date();
|
if (null == date) {
|
return null;
|
}
|
SimpleDateFormat sdf = new SimpleDateFormat(format);
|
return sdf.format(date);
|
}
|
|
/**
|
* 指定毫秒数的时间戳
|
*
|
* @param millis 毫秒数
|
* @return 指定毫秒数的时间戳
|
*/
|
public static Timestamp getTimestamp(long millis) {
|
return new Timestamp(millis);
|
}
|
|
/**
|
* 以字符形式表示的时间戳
|
*
|
* @param time 毫秒数
|
* @return 以字符形式表示的时间戳
|
*/
|
public static Timestamp getTimestamp(String time) {
|
return new Timestamp(Long.parseLong(time));
|
}
|
|
/**
|
* 系统当前的时间戳
|
*
|
* @return 系统当前的时间戳
|
*/
|
public static Timestamp getTimestamp() {
|
return new Timestamp(System.currentTimeMillis());
|
}
|
|
/**
|
* 当前时间,格式 yyyy-MM-dd HH:mm:ss
|
*
|
* @return 当前时间的标准形式字符串
|
*/
|
public static String now() {
|
return datetimeFormat.get().format(getCalendar().getTime());
|
}
|
|
/**
|
* 指定日期的时间戳
|
*
|
* @param date 指定日期
|
* @return 指定日期的时间戳
|
*/
|
public static Timestamp getTimestamp(Date date) {
|
return new Timestamp(date.getTime());
|
}
|
|
/**
|
* 指定日历的时间戳
|
*
|
* @param cal 指定日历
|
* @return 指定日历的时间戳
|
*/
|
public static Timestamp getCalendarTimestamp(Calendar cal) {
|
// ---------------------return new Timestamp(cal.getTimeInMillis());
|
return new Timestamp(cal.getTime().getTime());
|
}
|
|
public static Timestamp gettimestamp() {
|
Date dt = new Date();
|
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String nowTime = df.format(dt);
|
java.sql.Timestamp buydate = java.sql.Timestamp.valueOf(nowTime);
|
return buydate;
|
}
|
|
// ////////////////////////////////////////////////////////////////////////////
|
// getMillis
|
// 各种方式获取的Millis
|
// ////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 系统时间的毫秒数
|
*
|
* @return 系统时间的毫秒数
|
*/
|
public static long getMillis() {
|
return System.currentTimeMillis();
|
}
|
|
/**
|
* 指定日历的毫秒数
|
*
|
* @param cal 指定日历
|
* @return 指定日历的毫秒数
|
*/
|
public static long getMillis(Calendar cal) {
|
// --------------------return cal.getTimeInMillis();
|
return cal.getTime().getTime();
|
}
|
|
/**
|
* 指定日期的毫秒数
|
*
|
* @param date 指定日期
|
* @return 指定日期的毫秒数
|
*/
|
public static long getMillis(Date date) {
|
return date.getTime();
|
}
|
|
/**
|
* 指定时间戳的毫秒数
|
*
|
* @param ts 指定时间戳
|
* @return 指定时间戳的毫秒数
|
*/
|
public static long getMillis(Timestamp ts) {
|
return ts.getTime();
|
}
|
|
// ////////////////////////////////////////////////////////////////////////////
|
// formatDate
|
// 将日期按照一定的格式转化为字符串
|
// ////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 默认方式表示的系统当前日期,具体格式:年-月-日
|
*
|
* @return 默认日期按“年-月-日“格式显示
|
*/
|
public static String formatDate() {
|
return date_sdf.get().format(getCalendar().getTime());
|
}
|
|
/**
|
* 默认方式表示的系统当前日期,具体格式:yyyy-MM-dd HH:mm:ss
|
*
|
* @return 默认日期按“yyyy-MM-dd HH:mm:ss“格式显示
|
*/
|
public static String formatDateTime() {
|
return datetimeFormat.get().format(getCalendar().getTime());
|
}
|
|
/**
|
* 获取时间字符串
|
*/
|
public static String getDataString(SimpleDateFormat formatstr) {
|
return formatstr.format(getCalendar().getTime());
|
}
|
|
/**
|
* 指定日期的默认显示,具体格式:年-月-日
|
*
|
* @param cal 指定的日期
|
* @return 指定日期按“年-月-日“格式显示
|
*/
|
public static String formatDate(Calendar cal) {
|
return date_sdf.get().format(cal.getTime());
|
}
|
|
/**
|
* 指定日期的默认显示,具体格式:年-月-日
|
*
|
* @param date 指定的日期
|
* @return 指定日期按“年-月-日“格式显示
|
*/
|
public static String formatDate(Date date) {
|
return date_sdf.get().format(date);
|
}
|
|
/**
|
* 指定毫秒数表示日期的默认显示,具体格式:年-月-日
|
*
|
* @param millis 指定的毫秒数
|
* @return 指定毫秒数表示日期按“年-月-日“格式显示
|
*/
|
public static String formatDate(long millis) {
|
return date_sdf.get().format(new Date(millis));
|
}
|
|
/**
|
* 默认日期按指定格式显示
|
*
|
* @param pattern 指定的格式
|
* @return 默认日期按指定格式显示
|
*/
|
public static String formatDate(String pattern) {
|
return getSDFormat(pattern).format(getCalendar().getTime());
|
}
|
|
/**
|
* 指定日期按指定格式显示
|
*
|
* @param cal 指定的日期
|
* @param pattern 指定的格式
|
* @return 指定日期按指定格式显示
|
*/
|
public static String formatDate(Calendar cal, String pattern) {
|
return getSDFormat(pattern).format(cal.getTime());
|
}
|
|
/**
|
* 指定日期按指定格式显示
|
*
|
* @param date 指定的日期
|
* @param pattern 指定的格式
|
* @return 指定日期按指定格式显示
|
*/
|
public static String formatDate(Date date, String pattern) {
|
return getSDFormat(pattern).format(date);
|
}
|
|
// ////////////////////////////////////////////////////////////////////////////
|
// formatTime
|
// 将日期按照一定的格式转化为字符串
|
// ////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 默认方式表示的系统当前日期,具体格式:年-月-日 时:分
|
*
|
* @return 默认日期按“年-月-日 时:分“格式显示
|
*/
|
public static String formatTime() {
|
return time_sdf.get().format(getCalendar().getTime());
|
}
|
|
/**
|
* 指定毫秒数表示日期的默认显示,具体格式:年-月-日 时:分
|
*
|
* @param millis 指定的毫秒数
|
* @return 指定毫秒数表示日期按“年-月-日 时:分“格式显示
|
*/
|
public static String formatTime(long millis) {
|
return time_sdf.get().format(new Date(millis));
|
}
|
|
/**
|
* 指定日期的默认显示,具体格式:年-月-日 时:分
|
*
|
* @param cal 指定的日期
|
* @return 指定日期按“年-月-日 时:分“格式显示
|
*/
|
public static String formatTime(Calendar cal) {
|
return time_sdf.get().format(cal.getTime());
|
}
|
|
/**
|
* 指定日期的默认显示,具体格式:年-月-日 时:分
|
*
|
* @param date 指定的日期
|
* @return 指定日期按“年-月-日 时:分“格式显示
|
*/
|
public static String formatTime(Date date) {
|
return time_sdf.get().format(date);
|
}
|
|
// ////////////////////////////////////////////////////////////////////////////
|
// formatShortTime
|
// 将日期按照一定的格式转化为字符串
|
// ////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 默认方式表示的系统当前日期,具体格式:时:分
|
*
|
* @return 默认日期按“时:分“格式显示
|
*/
|
public static String formatShortTime() {
|
return short_time_sdf.get().format(getCalendar().getTime());
|
}
|
|
/**
|
* 指定毫秒数表示日期的默认显示,具体格式:时:分
|
*
|
* @param millis 指定的毫秒数
|
* @return 指定毫秒数表示日期按“时:分“格式显示
|
*/
|
public static String formatShortTime(long millis) {
|
return short_time_sdf.get().format(new Date(millis));
|
}
|
|
/**
|
* 指定日期的默认显示,具体格式:时:分
|
*
|
* @param cal 指定的日期
|
* @return 指定日期按“时:分“格式显示
|
*/
|
public static String formatShortTime(Calendar cal) {
|
return short_time_sdf.get().format(cal.getTime());
|
}
|
|
/**
|
* 指定日期的默认显示,具体格式:时:分
|
*
|
* @param date 指定的日期
|
* @return 指定日期按“时:分“格式显示
|
*/
|
public static String formatShortTime(Date date) {
|
return short_time_sdf.get().format(date);
|
}
|
|
// ////////////////////////////////////////////////////////////////////////////
|
// parseDate
|
// parseCalendar
|
// parseTimestamp
|
// 将字符串按照一定的格式转化为日期或时间
|
// ////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间
|
*
|
* @param src 将要转换的原始字符窜
|
* @param pattern 转换的匹配格式
|
* @return 如果转换成功则返回转换后的日期
|
* @throws ParseException
|
*/
|
public static Date parseDate(String src, String pattern) throws ParseException {
|
return getSDFormat(pattern).parse(src);
|
|
}
|
|
/**
|
* 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间
|
*
|
* @param src 将要转换的原始字符窜
|
* @param pattern 转换的匹配格式
|
* @return 如果转换成功则返回转换后的日期
|
* @throws ParseException
|
*/
|
public static Calendar parseCalendar(String src, String pattern) throws ParseException {
|
|
Date date = parseDate(src, pattern);
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
return cal;
|
}
|
|
public static String formatAddDate(String src, String pattern, int amount) throws ParseException {
|
Calendar cal;
|
cal = parseCalendar(src, pattern);
|
cal.add(Calendar.DATE, amount);
|
return formatDate(cal);
|
}
|
|
/**
|
* 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间
|
*
|
* @param src 将要转换的原始字符窜
|
* @param pattern 转换的匹配格式
|
* @return 如果转换成功则返回转换后的时间戳
|
* @throws ParseException
|
*/
|
public static Timestamp parseTimestamp(String src, String pattern) throws ParseException {
|
Date date = parseDate(src, pattern);
|
return new Timestamp(date.getTime());
|
}
|
|
// ////////////////////////////////////////////////////////////////////////////
|
// dateDiff
|
// 计算两个日期之间的差值
|
// ////////////////////////////////////////////////////////////////////////////
|
|
/**
|
* 计算两个时间之间的差值,根据标志的不同而不同
|
*
|
* @param flag 计算标志,表示按照年/月/日/时/分/秒等计算
|
* @param calSrc 减数
|
* @param calDes 被减数
|
* @return 两个日期之间的差值
|
*/
|
public static int dateDiff(char flag, Calendar calSrc, Calendar calDes) {
|
|
long millisDiff = getMillis(calSrc) - getMillis(calDes);
|
|
if (flag == 'y') {
|
return (calSrc.get(Calendar.YEAR) - calDes.get(Calendar.YEAR));
|
}
|
|
if (flag == 'd') {
|
return (int) (millisDiff / DAY_IN_MILLIS);
|
}
|
|
if (flag == 'h') {
|
return (int) (millisDiff / HOUR_IN_MILLIS);
|
}
|
|
if (flag == 'm') {
|
return (int) (millisDiff / MINUTE_IN_MILLIS);
|
}
|
|
if (flag == 's') {
|
return (int) (millisDiff / SECOND_IN_MILLIS);
|
}
|
|
return 0;
|
}
|
|
public static Long getCurrentTimestamp() {
|
return Long.valueOf(DateUtils.yyyymmddhhmmss.get().format(new Date()));
|
}
|
|
/**
|
* String类型 转换为Date, 如果参数长度为10 转换格式”yyyy-MM-dd“ 如果参数长度为19 转换格式”yyyy-MM-dd
|
* HH:mm:ss“ * @param text String类型的时间值
|
*/
|
@Override
|
public void setAsText(String text) throws IllegalArgumentException {
|
if (StringUtils.hasText(text)) {
|
try {
|
if (text.indexOf(":") == -1 && text.length() == 10) {
|
setValue(DateUtils.date_sdf.get().parse(text));
|
} else if (text.indexOf(":") > 0 && text.length() == 19) {
|
setValue(DateUtils.datetimeFormat.get().parse(text));
|
} else {
|
throw new IllegalArgumentException("Could not parse date, date format is error ");
|
}
|
} catch (ParseException ex) {
|
IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage());
|
iae.initCause(ex);
|
throw iae;
|
}
|
} else {
|
setValue(null);
|
}
|
}
|
|
public static int getYear(Date date) {
|
GregorianCalendar calendar = new GregorianCalendar();
|
calendar.setTime(date);
|
return calendar.get(Calendar.YEAR);
|
}
|
|
public static int getMonth(Date date) {
|
GregorianCalendar calendar = new GregorianCalendar();
|
calendar.setTime(date);
|
return calendar.get(Calendar.MONTH)+1;
|
}
|
|
|
//计算两个日期相差天数
|
public static int daysBetween(Date smdate, Date bdate) throws ParseException {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
smdate = sdf.parse(sdf.format(smdate));
|
bdate = sdf.parse(sdf.format(bdate));
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(smdate);
|
long time1 = cal.getTimeInMillis();
|
cal.setTime(bdate);
|
long time2 = cal.getTimeInMillis();
|
long between_days = (time2 - time1) / (1000 * 3600 * 24);
|
|
return Integer.parseInt(String.valueOf(between_days));
|
}
|
|
|
//获取上周的开始时间
|
public static Date getBeginDayOfLastWeek() {
|
Date date = new Date();
|
if (date == null) {
|
return null;
|
}
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
|
if (dayofweek == 1) {
|
dayofweek += 7;
|
}
|
cal.add(Calendar.DATE, 2 - dayofweek - 7);
|
return getDayStartTime(cal.getTime());
|
}
|
|
//获取上周的结束时间
|
public static Date getEndDayOfLastWeek() {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(getBeginDayOfLastWeek());
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
Date weekEndSta = cal.getTime();
|
return getDayEndTime(weekEndSta);
|
}
|
|
//获取某个日期的开始时间
|
public static Timestamp getDayStartTime(Date d) {
|
Calendar calendar = Calendar.getInstance();
|
if (null != d) calendar.setTime(d);
|
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
|
calendar.set(Calendar.MILLISECOND, 0);
|
return new Timestamp(calendar.getTimeInMillis());
|
}
|
|
//获取某个日期的结束时间
|
public static Timestamp getDayEndTime(Date d) {
|
Calendar calendar = Calendar.getInstance();
|
if (null != d) calendar.setTime(d);
|
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
|
calendar.set(Calendar.MILLISECOND, 999);
|
return new Timestamp(calendar.getTimeInMillis());
|
}
|
|
public static int getCurYear() {
|
Calendar calendar = Calendar.getInstance();
|
return calendar.get(Calendar.YEAR);//获得当前的年
|
}
|
public static int getCurMonth() {
|
Calendar calendar = Calendar.getInstance();
|
return calendar.get(Calendar.MONTH);//获得当前的月
|
}
|
|
public static int getCurWeek() {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
|
calendar.setMinimalDaysInFirstWeek(7);//可以不用设置
|
calendar.setTimeInMillis(System.currentTimeMillis());//获得当前的时间戳
|
int weekYear = calendar.get(Calendar.YEAR);//获得当前的年
|
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);//获得当前日期属于今年的第几周
|
return weekOfYear;
|
}
|
|
// 获得本周一与当前日期相差的天数
|
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;
|
}
|
|
/**
|
* 上周开始时间string
|
*
|
* @return
|
*/
|
public static String lastWeekStart() {
|
return date2Str(getBeginDayOfLastWeek(), monDayFormat.get());
|
|
}
|
|
/**
|
* 上结束时间string
|
*
|
* @return
|
*/
|
public static String lastWeekEnd() {
|
return date2Str(getEndDayOfLastWeek(), monDayFormat.get());
|
|
}
|
|
|
/**
|
* 本周开始时间string
|
*
|
* @return
|
*/
|
public static String thisWeekStart() {
|
return date2Str(getCurrentMonday(), monDayFormat.get());
|
|
}
|
|
/**
|
* 本周结束时间string
|
*
|
* @return
|
*/
|
public static String thisWeekEnd() {
|
return date2Str(getPreviousSunday(), monDayFormat.get());
|
|
}
|
|
// 根据year年的第week周,查询本周的起止时间
|
public static Date weekToDayStartDate(int week) {
|
Calendar calendar = Calendar.getInstance();
|
int year = calendar.get(Calendar.YEAR);
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
System.out.println("开始日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
|
// calendar.add(Calendar.DAY_OF_YEAR, 6);
|
// System.out.println("结束日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
|
return calendar.getTime();
|
}
|
|
// 根据year年的第week周,查询本周的起止时间
|
public static Date weekToDayEndDate(int week) {
|
Calendar calendar = Calendar.getInstance();
|
int year = calendar.get(Calendar.YEAR);
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
System.out.println("开始日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
|
calendar.add(Calendar.DAY_OF_YEAR, 6);
|
System.out.println("结束日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
|
return calendar.getTime();
|
}
|
|
|
// 根据当前年的第week周,查询本周的起止时间
|
public static String weekToDayStartStr(int week) {
|
/* Calendar calendar = Calendar.getInstance();
|
int year = calendar.get(Calendar.YEAR);
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
// calendar.add(Calendar.DAY_OF_YEAR, 6);
|
// System.out.println("结束日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
|
return new SimpleDateFormat("MM月dd日").format(calendar.getTime());*/
|
|
SimpleDateFormat sdf=new SimpleDateFormat("MM月dd日");
|
Calendar cal=Calendar.getInstance();
|
int year = cal.get(Calendar.YEAR);
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
String endDate = sdf.format(cal.getTime());
|
return beginDate;
|
|
}
|
public static String weekToDayStartStr(int year,int week) {
|
/* Calendar calendar = Calendar.getInstance();
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
// calendar.add(Calendar.DAY_OF_YEAR, 6);
|
// System.out.println("结束日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
|
return new SimpleDateFormat("MM月dd日").format(calendar.getTime());*/
|
|
SimpleDateFormat sdf=new SimpleDateFormat("MM月dd日");
|
Calendar cal=Calendar.getInstance();
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
String endDate = sdf.format(cal.getTime());
|
return beginDate;
|
}
|
|
public static String weekToDayStartStr(int year,int week,String fomat) {
|
/*Calendar calendar = Calendar.getInstance();
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
// calendar.add(Calendar.DAY_OF_YEAR, 6);
|
// System.out.println("结束日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
|
return new SimpleDateFormat(fomat).format(calendar.getTime());*/
|
|
SimpleDateFormat sdf=new SimpleDateFormat(fomat);
|
Calendar cal=Calendar.getInstance();
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
String endDate = sdf.format(cal.getTime());
|
|
return beginDate;
|
}
|
|
// 根据year年的第week周,查询本周的起止时间
|
public static String weekToDayEndStr(int week) {
|
/* Calendar calendar = Calendar.getInstance();
|
|
int year = calendar.get(Calendar.YEAR);
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
|
calendar.add(Calendar.DAY_OF_YEAR, 6);
|
return new SimpleDateFormat("MM月dd日").format(calendar.getTime());*/
|
|
SimpleDateFormat sdf=new SimpleDateFormat("MM月dd日");
|
Calendar cal=Calendar.getInstance();
|
int year = cal.get(Calendar.YEAR);
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
String endDate = sdf.format(cal.getTime());
|
return endDate;
|
}
|
public static String weekToDayEndStr(int year,int week) {
|
/* Calendar calendar = Calendar.getInstance();
|
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
|
calendar.add(Calendar.DAY_OF_YEAR, 6);
|
return new SimpleDateFormat("MM月dd日").format(calendar.getTime());*/
|
|
SimpleDateFormat sdf=new SimpleDateFormat("MM月dd日");
|
Calendar cal=Calendar.getInstance();
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
String endDate = sdf.format(cal.getTime());
|
return endDate;
|
}
|
|
/**
|
*
|
* @param year
|
* @param week
|
* @param format
|
* @return
|
*/
|
public static String weekToDayEndStr(int year,int week,String format) {
|
/*Calendar calendar = Calendar.getInstance();
|
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
|
calendar.add(Calendar.DAY_OF_YEAR, 6);
|
return new SimpleDateFormat(format).format(calendar.getTime());*/
|
|
SimpleDateFormat sdf=new SimpleDateFormat(format);
|
Calendar cal=Calendar.getInstance();
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
String endDate = sdf.format(cal.getTime());
|
return endDate;
|
}
|
|
|
|
// 根据year的第week周,查询本周属于哪个月
|
public static Integer yearweekInMonth(int year, int week) {
|
SimpleDateFormat sdf=new SimpleDateFormat("MM");
|
Calendar cal=Calendar.getInstance();
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 6);
|
String endDate = sdf.format(cal.getTime());
|
return Integer.parseInt(endDate);
|
}
|
|
/**
|
*
|
* @param year
|
* @param week
|
* @param format
|
* @return
|
*/
|
public static String weekToFriDayEndStr(int year,int week,String format) {
|
/*Calendar calendar = Calendar.getInstance();
|
|
// ①.设置该年份的开始日期:第一个月的第一天
|
calendar.set(year, 0, 1);
|
// ②.计算出第一周还剩几天:+1是因为1号是1天
|
int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
|
// ③.周数减去第一周再减去要得到的周
|
week = week - 2;
|
// ④.计算起止日期
|
calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
|
calendar.add(Calendar.DAY_OF_YEAR, 6);
|
return new SimpleDateFormat(format).format(calendar.getTime());*/
|
|
SimpleDateFormat sdf=new SimpleDateFormat(format);
|
Calendar cal=Calendar.getInstance();
|
// 设置每周的开始日期
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
cal.setMinimalDaysInFirstWeek(7);
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.WEEK_OF_YEAR, week);
|
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
|
String beginDate = sdf.format(cal.getTime());
|
|
cal.add(Calendar.DAY_OF_WEEK, 4);
|
String endDate = sdf.format(cal.getTime());
|
return endDate;
|
}
|
|
|
|
|
/**
|
* 根据指定日期获取周
|
* @param date
|
* @return
|
*/
|
public static Integer getWeekNoByDate(Date date) {
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
calendar.setTime(date);
|
//Calendar.MONTH从0开始,12月对应的是数字11
|
calendar.setMinimalDaysInFirstWeek(7);
|
|
Integer weekNumbe = calendar.get(Calendar.WEEK_OF_YEAR);
|
if (calendar.get(Calendar.MONTH)>=11 && weekNumbe<=1 ){
|
|
weekNumbe +=52;
|
|
}
|
return weekNumbe;
|
}
|
|
public static Date getTomorrow() {
|
// 获取当前时间
|
Date date = new Date();
|
Calendar calendar = new GregorianCalendar();
|
calendar.setTime(date);
|
// 把日期往后增加一天,整数 往后推,负数往前移动
|
calendar.add(Calendar.DATE, 1);
|
// 这个时间就是日期往后推一天的结果
|
date = calendar.getTime();
|
return date;
|
}
|
|
/**
|
* 获取指定日期是星期几
|
* @param date
|
* @return
|
*/
|
public static int getWeekNo(Date date){
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
return calendar.get(Calendar.DAY_OF_WEEK)-1;
|
}
|
|
|
public static String getWeekInMonth(Date date){
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
//设置第一周所需的最少天数 TODO 重要
|
calendar.setMinimalDaysInFirstWeek(7);
|
int week = calendar.get(Calendar.WEEK_OF_MONTH);
|
int month = calendar.get(Calendar.MONTH)+1;
|
int year = calendar.get(Calendar.YEAR);
|
|
return year+"年"+month+"月第"+week+"周";
|
|
}
|
|
public static Integer getWeekInMonth(String str){
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
Date date = null;
|
try {
|
date = dateFormat.parse(str);
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
int month = calendar.get(Calendar.MONTH)+1;
|
if(month==1){
|
calendar.setMinimalDaysInFirstWeek(7);
|
}
|
//设置第一周所需的最少天数 TODO 重要 特殊,这里根据单个日期计算一个月有多少周。只用写1
|
|
int week = calendar.get(Calendar.WEEK_OF_MONTH);
|
|
int year = calendar.get(Calendar.YEAR);
|
|
return week;
|
} catch (Exception e) {
|
e.printStackTrace();
|
return null;
|
|
}
|
|
}
|
|
|
public static String getWeekInMonth(String str,Integer type){
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
Date date = null;
|
try {
|
date = dateFormat.parse(str);
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
//设置第一周所需的最少天数 TODO 重要 特殊,这里根据单个日期计算一个月有多少周。只用写1
|
calendar.setMinimalDaysInFirstWeek(1);
|
int week = calendar.get(Calendar.WEEK_OF_MONTH);
|
int month = calendar.get(Calendar.MONTH)+1;
|
int year = calendar.get(Calendar.YEAR);
|
|
return year +"年"+ month +"月第" +week+"周";
|
} catch (Exception e) {
|
e.printStackTrace();
|
return null;
|
|
}
|
|
}
|
|
public static Date minusSeconds(int second){
|
// 获取当前时间
|
LocalDateTime currentTime = LocalDateTime.now();
|
|
// 减去一秒
|
LocalDateTime newTime = currentTime.minusSeconds(second);
|
|
// 将LocalDateTime转换为Date
|
Date currentDate = java.sql.Timestamp.valueOf(newTime);
|
return currentDate;
|
|
}
|
|
|
|
|
|
|
/**
|
* 秒钟转时分秒
|
* @param time 秒
|
* @return 时分秒
|
*/
|
public static String secToTime(int time) {
|
String timeStr = null;
|
int hour = 0;
|
int minute = 0;
|
int second = 0;
|
if (time <= 0) return "00分00秒";
|
else {
|
minute = time / 60;
|
if (minute < 60) {
|
second = time % 60 ;
|
timeStr = unitFormat(minute) + "分" + unitFormat(second) + "秒";
|
} else {
|
hour = minute / 60;
|
//if (hour > 99) return "99时59分59秒";
|
minute = minute % 60;
|
second = time - hour * 3600 - minute * 60 + 1;
|
timeStr = unitFormat(hour) + "时" + unitFormat(minute) + "分" + unitFormat(second) + "秒";
|
}
|
}
|
return timeStr;
|
}
|
|
/**
|
* 保持两位数字
|
* @param i
|
* @return
|
*/
|
public static String unitFormat(int i) {
|
String retStr = null;
|
if (i >= 0 && i < 10) retStr = "0" + Integer.toString(i);
|
else retStr = "" + i;
|
return retStr;
|
}
|
|
|
|
}
|