import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
*
* @author Duson
* @version V1.3
* @date 2018-7-19
*
*/
public class DateUtil {
private static final String[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四",
"星期五", "星期六" };
// 定义日期转换模式的数组
// 按顺序对下面的匹配规则进行转换,所以匹配规则从长到短,否则会导致日期某些部分丢失
private String[] patterns = {
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd HH:mm",
"yyyy-MM-dd HH",
"yyyy-MM-dd",
"yyyy-MM",
"HH:mm:ss"
};
//_start 把日期按照默认的格式(yyyy-MM-dd HH:mm:ss)转换成字符串
/**
* 把日期按照默认的格式(yyyy-MM-dd HH:mm:ss)转换成字符串
* @param date 被转换的日期
* @return 转换后的日期字符串
*/
public static String toStr(Date date) {
return toStr(date, "yyyy-MM-dd HH:mm:ss");
}
//_end
//_start 把日期按照指定的格式转换成字符串
/**
* 把日期按照指定的格式转换成字符串
* @param date 被转换的日期
* @param pattern 指定的转换格式
* @return 转换后的日期字符串
*/
public static String toStr(Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
//_end
//_start 获取日期的年月日部分的字符串
/**
* 获取日期的年月日部分的字符串
* @param date 被转换的日期
* @return 日期的年月日部分
*/
public static String toYMD(Date date) {
return toStr(date, "yyyy-MM-dd");
}
//_end
//_start 获取日期的时分秒部分的字符串
/**
* 获取日期的时分秒部分的字符串
* @param date 被转换的日期
* @return 日期的时分秒部分
*/
public static String toHMS(Date date) {
return toStr(date, "HH:mm:ss");
}
//_end
//_start 日期格式验证(自动验证多种日期格式)
/**
* 日期格式验证(自动验证多种日期格式)
* @param str - 被校验的字符串
* @return 验证成功返回true,失败返回false
*/
public static boolean isDate(String str) {
return toDate(str) != null;
}
//_end
//_start 日期格式验证(按指定日期格式验证)
/**
* 日期格式验证(按指定日期格式验证)
* @param str - 被校验的字符串
* @return 验证成功返回true,失败返回false
*/
public static boolean isDate(String str,String pattern) {
return toDate(str,pattern) != null;
}
//_end
//_start 字符串转换为日期(遍历多种日期转换格式),转换失败返回null
/**
* 字符串转换为日期(遍历多种日期转换格式),转换失败返回null
* @param str 被转换的字符串
* @return 转换后的日期,转换失败返回null
*/
public static Date toDate(String str) {
str=str.replaceAll("/", "-");
// 遍历转换模式数组
for (String pattern : patterns) {
try {
// 根据每个转换模式创建SimpleDateFormat对象,并且尝试把字符串值转换成日期
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setLenient(false);
return sdf.parse(str);
} catch (Exception e) {
// 出现异常代表当前转换模式转换失败,因为数组中还有其他转换模式,所以要继续尝试转换
continue;
}
}
return null;
}
//_end
//_start 把字符串转换成指定格式的日期,转换失败返回null
/**
* 把字符串转换成指定格式的日期
* @param str 被转换的字符串
* @param pattern 指定的日期转换格式
* @return 转换后的日期,转换失败返回null
*/
public static Date toDate(String str, String pattern) {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setLenient(false);
try {
date = sdf.parse(str);
} catch (ParseException e) {
}
return date;
}
//_end
//_start 根据指定日期获取Calendar实例
/**
* 根据指定日期获取Calendar实例
* @param date 指定的日期
* @return Calendar实例
*/
public static Calendar getCalendar(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c;
}
//_end
//_start 根据指定日期字符串获取Calendar实例
/**
* 根据指定日期获取Calendar实例
* @param date 指定的日期
* @return 日期转换失败则返回null,转换成功则返回Calendar
*/
public static Calendar getCalendar(String str) {
Date date=toDate(str);
if(date==null)return null;
return getCalendar(date);
}
//_end
//_start 获取指定日期的年
/**
* 获取指定日期的年
* @param date 指定的日期
* @return 日期的年
*/
public static int getYear(Date date) {
return getCalendar(date).get(Calendar.YEAR);
}
//_end
//_start 获取指定日期的月
/**
* 获取指定日期的月
* @param date 指定的日期
* @return 日期的月
*/
public static int getMonth(Date date) {
return getCalendar(date).get(Calendar.MONTH);
}
//_end
//_start 获取指定日期的日
/**
* 获取指定日期的日
* @param date 指定的日期
* @return 日期的日
*/
public static int getDay(Date date) {
return getCalendar(date).get(Calendar.DAY_OF_MONTH);
}
//_end
//_start 获取指定日期的时
/**
* 获取指定日期的时
* @param date 指定的日期
* @return 日期的时
*/
public static int getHour(Date date) {
return getCalendar(date).get(Calendar.HOUR_OF_DAY);
}
//_end
//_start 获取指定日期的分
/**
* 获取指定日期的分
* @param date 指定的日期
* @return 日期的分
*/
public static int getMinute(Date date) {
return getCalendar(date).get(Calendar.MINUTE);
}
//_end
//_start 获取指定日期的秒
/**
* 获取指定日期的秒
* @param date 指定的日期
* @return 日期的秒
*/
public static int getSecond(Date date) {
return getCalendar(date).get(Calendar.SECOND);
}
//_end
//_start 获取指定日期的星期
/**
* 获取指定日期的星期
* @param date 指定的日期
* @return 日期的星期
*/
public static String getWeek(Date date) {
Calendar c = getCalendar(date);
int week = c.get(Calendar.DAY_OF_WEEK);
return weeks[week - 1];
}
//_end
//_start 日期的年加减操作
/**
* 日期的年加减操作
* @param date 被操作的日期
* @param year 增加的年(负数表示减)
* @return 年加减后的日期
*/
public static Date addYear(Date date, int year) {
Calendar c = getCalendar(date);
c.add(Calendar.YEAR, year);
return c.getTime();
}
//_end
//_start 日期的月加减操作
/**
* 日期的月加减操作
* @param date 被操作的日期
* @param month 增加的月(负数表示减)
* @return 月加减后的日期
*/
public static Date addMonth(Date date, int month) {
Calendar c = getCalendar(date);
c.add(Calendar.MONTH, month);
return c.getTime();
}
//_end
//_start 日期的日加减操作
/**
* 日期的日加减操作
* @param date 被操作的日期
* @param day 增加的日(负数表示减)
* @return 日加减后的日期
*/
public static Date addDay(Date date, int day) {
Calendar c = getCalendar(date);
c.add(Calendar.DAY_OF_MONTH, day);
return c.getTime();
}
//_end
//_start 日期的时加减操作
/**
* 日期的时加减操作
* @param date 被操作的日期
* @param hour 增加的时(负数表示减)
* @return 时加减后的日期
*/
public static Date addHour(Date date, int hour) {
Calendar c = getCalendar(date);
c.add(Calendar.HOUR_OF_DAY, hour);
return c.getTime();
}
//_end
//_start 日期的分加减操作
/**
* 日期的分加减操作
* @param date 被操作的日期
* @param minute 增加的分(负数表示减)
* @return 分加减后的日期
*/
public static Date addMinute(Date date, int minute) {
Calendar c = getCalendar(date);
c.add(Calendar.MINUTE, minute);
return c.getTime();
}
//_end
//_start 日期的秒加减操作
/**
* 日期的秒加减操作
* @param date 被操作的日期
* @param second 增加的秒(负数表示减)
* @return 秒加减后的日期
*/
public static Date addSecond(Date date, int second) {
Calendar c = getCalendar(date);
c.add(Calendar.SECOND, second);
return c.getTime();
}
//_end
//_start 日期的星期加减操作
/**
* 日期的星期加减操作
* @param date 被操作的日期
* @param week 增加的星期(负数表示减)
* @return 星期加减后的日期
*/
public static Date addWeek(Date date, int week) {
Calendar c = getCalendar(date);
c.add(Calendar.DAY_OF_WEEK, week);
return c.getTime();
}
//_end
//_start 验证日期允许的最小日期
/**
* 验证日期允许的最小日期
* @param date 被校验的日期
* @param minDate 允许的最小日期(日期字符串会自动换号为日期)
* @return 验证成功返回true,否则返回false
*/
public static boolean MinDate(Date date,String minDate){
return date.compareTo(toDate(minDate))>=0;
}
//_end
//_start 验证日期允许的最大日期
/**
* 验证日期允许的最大日期
* @param date 被校验的日期
* @param maxDate 允许的最大日期(日期字符串会自动换号为日期)
* @return 验证成功返回true,否则返回false
*/
public static boolean MaxDate(Date date,String maxDate){
return date.compareTo(toDate(maxDate))<=0;
}
//_end
//_start 验证日期允许日期范围
/**
* 验证日期允许日期范围
* @param date 被校验的日期
* @param minDate 允许的最小日期(日期字符串会自动换号为日期)
* @param maxDate 允许的最大日期(日期字符串会自动换号为日期)
* @return 验证成功返回true,否则返回false
*/
public static boolean RangeDate(Date date,String minDate,String maxDate){
return MinDate(date, minDate)&&MaxDate(date, maxDate);
}
//_end
}
【JavaSE】日期操作DateUtil丶Date丶SimpleDateFormat丶Calendar
最新推荐文章于 2022-03-29 08:54:40 发布