1. 程式人生 > >spring boot實戰之日期處理

spring boot實戰之日期處理

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提前自己常用的攻擊方法。