web開發中經常需要對日期進行操作,如字符串日期轉long,long型轉字符串,日期計算等,提取一個日期處理工具類,提供常見的日期操作可以讓開發更輕松一些。
毫秒(long)轉字符串日期
對long型時間進行格式化在web開發中是很經常出現的一個操作,這里主要使用joda-time包內的DateTime來實現,joda-time是時間操作很好的一個工具包。
public final static String DATE_FORMAT_DEFAULT = "yyyy-MM-dd";
/**
* 將毫秒時間轉換為yyyy-MM-dd格式的時間
* @author yangwenkui
* @time 2017年10月6日 下午5:56:40
* @param time 毫秒數
* @return
*/
public static String longToString(long time) {
return longToString(time, DATE_FORMAT_DEFAULT);
}
/**
* 將毫秒時間轉換為指定格式的時間
* @author yangwenkui
* @time 2017年10月6日 下午5:56:40
* @param time 毫秒數
* @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>
字符串日期轉毫秒(long)
字符串日期轉為毫秒值也是web開發內經常出現的一個場景,這里主要根據字符串的長度來判斷其格式,進而截取字符串獲取年、月、日等,再將這些值設置入calender內對應的屬性上獲取最終的時間。
/**
* 將字符串類型的日期轉換為毫秒數
* @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天的日期
日期計算偶爾也會出現,這里主要通過java.util.Calendar類來實現,Calendar提供了良好的接口,可以方便的獲取年、月、日、時、分、秒、周等,也可以對應的設置指定屬性的值,是很方便的日期計算工具。
/**
* 獲取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正數 多少天之后的日期 負數 多少天之后的日期
* @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 正數 多少天之后的日期 負數 多少天之后的日期
* @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 正數 多少天之后的日期 負數 多少天之后的日期
* @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 正數 多少天之后的日期 負數 多少天之后的日期
* @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);
}
小結
web開發內,提取常用工具類,不斷豐富開發工具包是很有意義的事,不用同樣的事情自己或其他同事重復開發很多次。本文列出了比較常用的long型時間格式化、string類型時間轉為long型毫秒數及日期計算的方法。可以基于joda-time包和calendar提前自己常用的攻擊方法。
完整代碼請在github內rest-base項目內查看。
https://github.com/q7322068/rest-base