web開發(fā)中經(jīng)常需要對日期進行操作雨让,如字符串日期轉(zhuǎn)long卧惜,long型轉(zhuǎn)字符串厘灼,日期計算等,提取一個日期處理工具類咽瓷,提供常見的日期操作可以讓開發(fā)更輕松一些设凹。
毫秒(long)轉(zhuǎn)字符串日期
對long型時間進行格式化在web開發(fā)中是很經(jīng)常出現(xiàn)的一個操作,這里主要使用joda-time包內(nèi)的DateTime來實現(xiàn)茅姜,joda-time是時間操作很好的一個工具包闪朱。
public final static String DATE_FORMAT_DEFAULT = "yyyy-MM-dd";
/**
* 將毫秒時間轉(zhuǎn)換為yyyy-MM-dd格式的時間
* @author yangwenkui
* @time 2017年10月6日 下午5:56:40
* @param time 毫秒數(shù)
* @return
*/
public static String longToString(long time) {
return longToString(time, DATE_FORMAT_DEFAULT);
}
/**
* 將毫秒時間轉(zhuǎn)換為指定格式的時間
* @author yangwenkui
* @time 2017年10月6日 下午5:56:40
* @param time 毫秒數(shù)
* @param format 日期格式
* @return
*/
public static String longToString(long time, String format) {
if (StringUtils.isBlank(format)) {
format = DATE_FORMAT_DEFAULT;
}
DateTime dTime = new DateTime(time);
return dTime.toString(format);
}
//添加maven依賴
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
字符串日期轉(zhuǎn)毫秒(long)
字符串日期轉(zhuǎn)為毫秒值也是web開發(fā)內(nèi)經(jīng)常出現(xiàn)的一個場景,這里主要根據(jù)字符串的長度來判斷其格式钻洒,進而截取字符串獲取年奋姿、月、日等素标,再將這些值設置入calender內(nèi)對應的屬性上獲取最終的時間称诗。
/**
* 將字符串類型的日期轉(zhuǎn)換為毫秒數(shù)
* @author yangwenkui
* @time 2017年10月6日 下午6:00:27
* @param dateStr
* @return
*/
public static long parseStringToLong(String dateStr) {
dateStr = dateStr.trim();
if (dateStr.length() == 19 || dateStr.length() == 23) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(5, 7)) - 1,
Integer.parseInt(dateStr.substring(8, 10)),
Integer.parseInt(dateStr.substring(11, 13)),
Integer.parseInt(dateStr.substring(14, 16)),
Integer.parseInt(dateStr.substring(17, 19)));
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 16) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(5, 7)) - 1,
Integer.parseInt(dateStr.substring(8, 10)),
Integer.parseInt(dateStr.substring(11, 13)),
Integer.parseInt(dateStr.substring(14, 16)));
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 14) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(4, 6)) - 1,
Integer.parseInt(dateStr.substring(6, 8)),
Integer.parseInt(dateStr.substring(8, 10)),
Integer.parseInt(dateStr.substring(10, 12)),
Integer.parseInt(dateStr.substring(12, 14)));
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 10 || dateStr.length() == 11) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(5, 7)) - 1,
Integer.parseInt(dateStr.substring(8, 10)), 0, 0, 0);
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 8 ) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(4, 6)) - 1,
Integer.parseInt(dateStr.substring(6, 8)), 0, 0, 0);
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else {
try {
return Long.parseLong(dateStr);
} catch (Exception e) {
return 0;
}
}
}
獲取指定日期前后N天的日期
日期計算偶爾也會出現(xiàn),這里主要通過java.util.Calendar類來實現(xiàn)头遭,Calendar提供了良好的接口寓免,可以方便的獲取年、月计维、日袜香、時、分鲫惶、秒蜈首、周等,也可以對應的設置指定屬性的值欠母,是很方便的日期計算工具欢策。
/**
* 獲取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正數(shù) 多少天之后的日期 負數(shù) 多少天之后的日期
* @return
*/
public static String getDay(String date,int num){
return getDay(date, num,DATE_FORMAT_DEFAULT);
}
/**
* 獲取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正數(shù) 多少天之后的日期 負數(shù) 多少天之后的日期
* @param format 日期格式
* @return
*/
public static String getDay(String date,int num,String format){
long t = parseStringToLong(date);
return getDay(t, num, DATE_FORMAT_DEFAULT);
}
/**
* 獲取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正數(shù) 多少天之后的日期 負數(shù) 多少天之后的日期
* @return
*/
public static String getDay(long date,int num){
return getDay(date, num, DATE_FORMAT_DEFAULT);
}
/**
* 獲取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正數(shù) 多少天之后的日期 負數(shù) 多少天之后的日期
* @param format 日期格式
* @return
*/
public static String getDay(long date,int num,String format){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH)+num);
return longToString(calendar.getTimeInMillis(),format);
}
小結(jié)
web開發(fā)內(nèi),提取常用工具類赏淌,不斷豐富開發(fā)工具包是很有意義的事猬腰,不用同樣的事情自己或其他同事重復開發(fā)很多次。本文列出了比較常用的long型時間格式化猜敢、string類型時間轉(zhuǎn)為long型毫秒數(shù)及日期計算的方法。可以基于joda-time包和calendar提前自己常用的攻擊方法缩擂。
完整代碼請在github內(nèi)rest-base項目內(nèi)查看鼠冕。
https://github.com/q7322068/rest-base