工作中用到的与日期相关的工具类
/**
* @author chen
* 日期相关的转换处理
* 2017.5.4
*/
public class DateUtils {
private static final String DATA_FORMAT = "yyyyMMdd";
private static final String DATA_TIME_FORMAT = "yyyyMMddHHmmss";
/**
* 根据指定的格式进行字串转日期类型分析
* @param strDate
* @param format 字串时间格式定义
* @return
*/
public static Date strToDateByFormat(String strDate, String format) {
SimpleDateFormat formatter = new SimpleDateFormat(format);
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 将yyyyMMdd格式的字串转换为日期
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
return strToDateByFormat(strDate, DATA_FORMAT);
}
/**
* 将yyyy-MM-dd HH:mm:ss格式的日期转为yyyyMMddHHmmss格式
* @param strDate
* @return
*/
public static String strDateTimeFormat(String strDate) {
Date date = strToDateByFormat(strDate,"yyyy-MM-dd HH:mm:ss");
return dateTimeToStr(date);
}
/**
* 将yyyy-MM-dd格式的日期转为yyyyMMdd格式
* @param strDate
* @return
*/
public static String strDateFormat(String strDate) {
String s = strDate.replace("-", "");
return s;
}
/**
* 将yyyyMMddHHmmss格式的字串转换为日期
* @param strDate
* @return
*/
public static Date strToDateTime(String strDate) {
return strToDateByFormat(strDate, DATA_TIME_FORMAT);
}
/**
* 按照指定的格式转换日期类型
* @param date
* @param format 转换格式,比如:"yyyy-MM-dd HH:mm:ss"
* @return
*/
public static String dateToStrByFormat(Date date, String format) {
SimpleDateFormat formatter = new SimpleDateFormat(format);
String dateString = formatter.format(date);
return dateString;
}
/**
* 按照"yyyyMMdd"格式转换日期类型为字符串
* @param date
* @return 比如:
*/
public static String dateToStr(Date date) {
return dateToStrByFormat(date, "yyyyMMdd");
}
/**
* 按照"yyyyMMddHHmmss"格式转换日期类型为字符串
* @param date
* @return
*/
public static String dateTimeToStr(Date date) {
return dateToStrByFormat(date, "yyyyMMddHHmmss");
}
/**
* 将yyyyMMddHHmmss格式的日期转为"yyyy-MM-dd HH:mm:ss"格式
* @param date
* @return
*/
public static String dateStrByFormat(String strDate) {
Date date = strToDateByFormat(strDate,"yyyyMMddHHmmss");
return dateToStrByFormat(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 根据指定的时间类型进行时间增减
* @param dateType:1:年, 2:月, 3、4:周, 5、6、7:天 ,10、11:小时,12:分钟 ,13:秒 ,14:毫秒
* @param date
* @param count
* @return
*/
private static Date calDate( int dateType, Date date, int count){
GregorianCalendar gc=new GregorianCalendar();
gc.setTime(date);
gc.add(dateType, count);
return gc.getTime();
}
/**
* 根据指定的时间增加年数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addYear(Date date, int count){
return calDate(GregorianCalendar.YEAR, date, count);
}
/**
* 根据指定的时间增加年数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addYear(String strDate, int count){
Date date = strToDate(strDate);
return calDate(GregorianCalendar.YEAR, date, count);
}
/**
* 根据指定的时间增加月数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addMonth(Date date, int count){
return calDate(GregorianCalendar.MONTH, date, count);
}
/**
* 根据指定的时间增加月数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addMonth(String strDate, int count){
Date date = strToDate(strDate);
return calDate(GregorianCalendar.MONTH, date, count);
}
/**
* 根据指定的时间增加星期数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addWeek(Date date, int count){
return calDate(GregorianCalendar.WEEK_OF_YEAR, date, count);
}
/**
* 根据指定的时间增加星期数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addWeek(String strDate, int count){
Date date = strToDate(strDate);
return calDate(GregorianCalendar.WEEK_OF_YEAR, date, count);
}
/**
* 根据指定的时间增加天数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addDay(Date date, int count){
return calDate(GregorianCalendar.DATE, date, count);
}
/**
* 根据指定的时间增加分钟
* @param time 指定时间
* @param count 增加量
* @return
*/
public static Date addMinute(Date time, int count){
return calDate(GregorianCalendar.MINUTE, time, count);
}
/**
* 根据指定的时间增加分钟
* @param strTime 指定时间
* @param count 增加量
* @return
*/
public static Date addMinute(String strTime, int count){
Date date = strToDateTime(strTime);
return calDate(GregorianCalendar.MINUTE, date, count);
}
/**
* 根据指定的时间增加天数
* @param date 指定时间
* @param count 增加量
* @return
*/
public static Date addDay(String strDate, int count){
Date date = strToDate(strDate);
return calDate(GregorianCalendar.DATE, date, count);
}
/**
* 根据指定的日期计算该日期对应周的第几天:星期一为1,星期日为7
* @param date
* @return
*/
public static int getDayOfWeek(Date date){
Calendar calendar = Calendar.getInstance();
if(date != null){
calendar.setTime(date);
}
int w = calendar.get(Calendar.DAY_OF_WEEK)-1 ;//星期天是1, 星期六是7
if(w <=0 ){//中国习惯 星期一为第一天,所以要做转换
w =7;
}
return w;
}
/**
* 根据指定的日期计算该日期对应周的第一天的时间(星期一)
* @param date
* @return
*/
public static Date getFirstDayOfWeek(Date date){
int w = getDayOfWeek(date);
if(w > 1){//需要计算星期一是哪一天
return addDay(date, 1-w);
}
return date;
}
/**
* 根据指定的日期计算该日期对应周的第七天的时间(星期日)
* @param date
* @return
*/
public static Date getLastDayOfWeek(Date date){
Date d = getFirstDayOfWeek(date);
return addDay(d, 6);
}
/**
* 根据指定的日期计算该日期对应月的第一天的时间(1号)
* @param date
* @return
*/
public static Date getFirstDayOfMonth(Date date){
Calendar calendar = Calendar.getInstance();
if(date != null){
calendar.setTime(date);
}
int w = calendar.get(Calendar.DAY_OF_MONTH) ;//
if(w > 1){//
return addDay(date, 1-w);
}
return date;
}
/**
* 根据指定的日期计算该日期对应月的最后天的时间
* @param date
* @return
*/
public static Date getLastDayOfMonth(Date date){
Date d = getFirstDayOfMonth(date);
d = addMonth(d, 1);
return addDay(d, -1);
}
/**
* 根据指定的日期计算该日期对应年的第一天的时间(一月1日)
* @param date
* @return
*/
public static Date getFirstDayOfYearh(Date date){
Calendar calendar = Calendar.getInstance();
if(date != null){
calendar.setTime(date);
}
int w = calendar.get(Calendar.DAY_OF_YEAR) ;//
if(w > 1){//
return addDay(date, 1-w);
}
return date;
}
/**
* 根据指定的日期计算该日期对应年的最后一天的时间(一月1日)
* @param date
* @return
*/
public static Date getLastDayOfYearh(Date date){
Date d = getFirstDayOfYearh(date);
d = addYear(d, 1);
return addDay(d, -1);
}
/**
* 日期比较 yyyyMMdd类型的时间或者yyyyMMddHHmmss
* @param date1
* @param date2
* @return date1 早于 date2 返回 负数,相等返回 0, 晚于 正数
*/
public static int compareStrDate(String date1, String date2) {
int d1 = Integer.parseInt(date1);
int d2 = Integer.parseInt(date2);
return (d1-d2);
}
public static void main(String[] args){
String s = DateUtils.strDateFormat("2017-05-07");
// String[] invalidDays = "1".split(",");
System.out.println(s);
}
}