java 日期的一系列操作

package csdn.shimiso.eim.util;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class TimestampTool {

/** 
 * 將毫秒轉成時間   2015-04-10 15:53:44
 */
public static String getTimeMillisToDate(long l) {
    Timestamp d = new Timestamp(l);
    return d.toString().substring(0, 19);  // 字符串剪切 0-19 
}


/**
 * 當前時間
 * 
 * @return Timestamp   2015-04-10 15:55:04.051
 * System.currentTimeMillis() 得到的是毫秒數
 */
public static Timestamp crunttime() {
    return new Timestamp(System.currentTimeMillis());
}



/**
 * 獲取當前時間的字符串
 * 
 * @return String ex:2006-07-07
 */
public static String getCurrentDate() {
    Timestamp d = crunttime();
    return d.toString().substring(0, 10);
}

/**
 * 獲取當前時間的字符串
 * 
 * @return String ex:2006-07-07 22:10:10
 */
public static String getCurrentDateTime() {
    Timestamp d = crunttime();
    return d.toString().substring(0, 19);
}

public static String getWeekDay() {
    Calendar date = Calendar.getInstance();  // 實例化日期
    date.setTime(crunttime());  // 設置日期 ,其實不用設置也可
    return new SimpleDateFormat("EEE").format(date.getTime());
    // 利用simpleDateFormat按照一定的格式輸出   yyyy-MM-dd EEE HH:mm:ss.SSS
}


/**
 * 獲取指定時間的字符串,只到日期
 * 
 * @param t
 *            Timestamp
 * @return String ex:2006-07-07
 */
public static String getStrDate(Timestamp t) {
    return t.toString().substring(0, 10);
}

/**
 * 獲取指定時間的字符串
 * 
 * @param t
 *            Timestamp
 * @return String ex:2006-07-07 22:10:10
 */
public static String getStrDateTime(Timestamp t) {
    return t.toString().substring(0, 19);
}

/**
 * 獲得當前日期的前段日期
 * 
 * @param days
 * @return String
 */
public static String getStrIntervalDate(String days) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, -Integer.parseInt(days));
    String strBeforeDays = sdf.format(cal.getTime());
    return strBeforeDays;
}




/**
 * 格式化時間
 * 
 * @param dt
 *            String -> yyyy-MM-dd hh:mm:ss
 * @return java.util.Date.Date -> yyyy-MM-dd hh:mm:ss
 */
public static Date parseDateTime(String dt) {
    Date jDt = new Date();
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (dt.length() > 10) {
            jDt = sdf.parse(dt); // 轉化 ,是時間用format()
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return jDt;
}

/**
 * 格式化時間yyyy-MM-dd HH:mm:ss
 * 
 * @param date
 *            java.util.Date
 * @return String -> yyyy-MM-dd HH:mm:ss
 */
public static String parseDateTime(Date date) {
    String s = null;
    if (date != null) {
        try {
            SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            s = f.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return s;
}

/**
 * 格式化日期
 * 
 * @param dt
 *            String -> yyyy-MM-dd
 * @return java.util.Date.Date -> yyyy-MM-dd
 */
public static Date parseDate(String dt) {
    Date jDt = new Date();
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if (dt.length() >= 8) {
            jDt = sdf.parse(dt);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return jDt;
}

/**
 * 格式化時間yyyy-MM-dd
 * 
 * @param date
 *            java.util.Date
 * @return String -> yyyy-MM-dd
 */
public static String parseDate(Date date) {
    String s = null;
    try {
        if (date != null) {
            SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
            s = f.format(date);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return s;
}


/**
 * 
 * @param dateStr
 * @return String
 */
public static String formatDateToHHMM(String dateStr) {
    String resultDate = null;
    try {
        if (dateStr.length() > 10) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:ss");
            Date date = sdf.parse(dateStr);
            resultDate = sdf.format(date);
        } else
            resultDate = dateStr;
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return resultDate;
}

/**
 * 返回日期 格式:2006-07-05
 * 
 * @param str
 * @return Timestamp
 */
public static Timestamp date(String str) {
    Timestamp tp = null;
    if (str.length() <= 10) {
        String[] string = str.trim().split("-");
        int one = Integer.parseInt(string[0]) - 1900;
        int two = Integer.parseInt(string[1]) - 1;
        int three = Integer.parseInt(string[2]);
        tp = new Timestamp(one, two, three, 0, 0, 0, 0);
    }
    return tp;
}

// 獲取指定日期之後的日期字符串 如 2007-04-15 後一天 就是 2007-04-16
public static String getNextDay(String strDate, int day) {
    if (strDate != null && !strDate.equals("")) {
        Calendar cal1 = Calendar.getInstance();
        String[] string = strDate.trim().split("-");
        int one = Integer.parseInt(string[0]) - 1900;
        int two = Integer.parseInt(string[1]) - 1;
        int three = Integer.parseInt(string[2]);
        cal1.setTime(new Date(one, two, three));
        cal1.add(Calendar.DAY_OF_MONTH, day);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        return formatter.format(cal1.getTime());
    } else {
        return null;
    }

}

// 獲取指定日期之後的日期字符串 如 2007-02-28 後一年 就是 2008-02-29 (含閏年)
public static String getNextYear(String strDate, int year) {
    Calendar cal1 = Calendar.getInstance();
    String[] string = strDate.trim().split("-");
    int one = Integer.parseInt(string[0]) - 1900;
    int two = Integer.parseInt(string[1]) - 1;
    int three = Integer.parseInt(string[2]);
    cal1.setTime(new Date(one, two, three));
    cal1.add(Calendar.YEAR, year);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    return formatter.format(cal1.getTime());
}

/**
 * 返回時間和日期 格式:2006-07-05 22:10:10
 * 
 * @param str
 * @return Timestamp
 */
public static Timestamp datetime(String str) {
    Timestamp tp = null;
    if (str != null && str.length() > 10) {
        String[] string = str.trim().split(" ");
        String[] date = string[0].split("-");
        String[] time = string[1].split(":");
        int date1 = Integer.parseInt(date[0]) - 1900;
        int date2 = Integer.parseInt(date[1]) - 1;
        int date3 = Integer.parseInt(date[2]);
        int time1 = Integer.parseInt(time[0]);
        int time2 = Integer.parseInt(time[1]);
        int time3 = Integer.parseInt(time[2]);
        tp = new Timestamp(date1, date2, date3, time1, time2, time3, 0);
    }
    return tp;
}

/**
 * 返回日期和時間(沒有秒) 格式:2006-07-05 22:10
 * 
 * @param str
 * @return Timestamp
 */
public static Timestamp datetimeHm(String str) {
    Timestamp tp = null;
    if (str.length() > 10) {
        String[] string = str.trim().split(" ");
        String[] date = string[0].split("-");
        String[] time = string[1].split(":");
        int date1 = Integer.parseInt(date[0]) - 1900;
        int date2 = Integer.parseInt(date[1]) - 1;
        int date3 = Integer.parseInt(date[2]);
        int time1 = Integer.parseInt(time[0]);
        int time2 = Integer.parseInt(time[1]);
        tp = new Timestamp(date1, date2, date3, time1, time2, 0, 0);
    }
    return tp;
}

/**
 * 獲得當前系統日期與本週一相差的天數
 * 
 * @return int
 */
private static int getMondayPlus() {
    Calendar calendar = Calendar.getInstance();
    // 獲得今天是一週的第幾天,正常順序是星期日是第一天,星期一是第二天......
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 星期日是第一天
    return (dayOfWeek == 1) ? -6 :2-dayOfWeek;
}


/**
 * 獲得距當前時間所在某星期的週一的日期 例: 0-本週週一日期 -1-上週週一日期 1-下週週一日期
 * 
 * @param week
 *            int
 * @return java.util.Date
 */
public static Date getMondayOfWeek(int week) {
    int mondayPlus = getMondayPlus(); // 相距週一的天數差
    GregorianCalendar current = new GregorianCalendar();
    current.add(GregorianCalendar.DATE, mondayPlus + 7 * week);
    return current.getTime();
}

/**
 * 獲得某日前後的某一天
 * 
 * @param date
 *            java.util.Date
 * @param day
 *            int
 * @return java.util.Date
 */
public static Date getDay(Date date, int day) {
    GregorianCalendar c = new GregorianCalendar();
    c.setTime(date);
    c.add(GregorianCalendar.DATE, day);
    return c.getTime();
}

/**
 * 獲得距當前周的前後某一週的日期
 * 
 * @param week
 *            int
 * @return String[]
 */
public static String[] getDaysOfWeek(int week) {
    String[] days = new String[7];
    Date monday = getMondayOfWeek(week); // 獲得距本週前或後的某週週一
    Timestamp t = new Timestamp(monday.getTime());
    days[0] = getStrDate(t);
    for (int i = 1; i < 7; i++) {
        t = new Timestamp(getDay(monday, i).getTime());
        days[i] = getStrDate(t);
    }
    return days;
}

/***
 * MCC的UTC時間轉換,MCC的UTC不是到毫秒的
 * 
 * @param utc
 * @return java.util.Date
 */
public static Date mccUTC2Date(long utc) {
    Date d = new Date();
    d.setTime(utc * 1000); // 轉成毫秒
    return d;
}

// 將長時間格式字符串轉換爲時間 yyyy-MM-dd HH:mm:ss
public static Date strToDateLong(String strDate) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    ParsePosition pos = new ParsePosition(0);
    Date strtodate = (Date) formatter.parse(strDate, pos);
    if (strtodate == null) {
        formatter = new SimpleDateFormat("yyyy-MM-dd");
        strtodate = (Date) formatter.parse(strDate, pos);
    }
    return strtodate;
}

// 將 yyyy-MM-dd HH:mm 格式字符串轉換爲時間
public static Date strToDateTime(String strDate) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    ParsePosition pos = new ParsePosition(0);
    Date strtodate = (Date) formatter.parse(strDate, pos);
    if (strtodate == null) {
        formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        strtodate = (Date) formatter.parse(strDate, pos);
    }
    return strtodate;
}

// 根據輸入的字符串返回日期字符串 2006-07-07 22:10 2006-07-07
public static String getStrDate(String str) {
    if (str.length() > 10) {
        String[] string = str.trim().split(" ");
        return string[0];
    } else {
        return getCurrentDate();
    }
}

// 獲取當前時間的字符串 2006-07-07 22:10:10 2006-07-07_221010
public static String getStrDateTime() {
    Timestamp d = crunttime();
    return d.toString().substring(0, 19).replace(":", "").replace(" ", "_");
}

// 根據日期字符串,返回今天,昨天或日期
public static String getDayOrDate(String str) {
    if (str != null && !str.equals("")) {
        if (getNextDay(str, 0).equals(getCurrentDate())) {
            str = "今天";
        } else if (getNextDay(str, 1).equals(getCurrentDate())) {
            str = "昨天";
        }
    }
    return str;
}

// 返回當前日期所在星期,2對應星期一
public static int getMonOfWeek() {
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(new Date());
    return cal1.get(Calendar.DAY_OF_WEEK);
}


/**
 * 獲取當前日期之前的日期字符串 如 2007-04-15 前5月 就是 2006-11-15
 */
public static String getPreviousMonth(int month) {
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(new Date());
    cal1.add(Calendar.MONTH, -month);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    return formatter.format(cal1.getTime());

}

public static String getStrYear(int year) {
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(new Date());
    cal1.add(Calendar.YEAR, -year);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
    return formatter.format(cal1.getTime()) + "年份";
}

/**
 * 比較兩個日期前後 可以大於或等於
 * 
 * @param starDate
 * @param endDate
 * @return
 */
public static boolean compareTwoDays(String starDate, String endDate) {
    Calendar cal_start = Calendar.getInstance();
    Calendar cal_end = Calendar.getInstance();
    cal_start.setTime(parseDate(starDate));
    cal_end.setTime(parseDate(endDate));
    return cal_end.after(cal_start);
}

public static int getDaysBetween(java.util.Calendar d1,
        java.util.Calendar d2) {
    if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
        java.util.Calendar swap = d1;
        d1 = d2;
        d2 = swap;
    }
    int days = d2.get(java.util.Calendar.DAY_OF_YEAR)
            - d1.get(java.util.Calendar.DAY_OF_YEAR);
    int y2 = d2.get(java.util.Calendar.YEAR);
    if (d1.get(java.util.Calendar.YEAR) != y2) {
        d1 = (java.util.Calendar) d1.clone();
        do {
            days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR);
            d1.add(java.util.Calendar.YEAR, 1);
        } while (d1.get(java.util.Calendar.YEAR) != y2);
    }
    return days;
}

// 得到兩個日期之間的年
public static int dateDiffYear(String starDate, String endDate) {
    int result = 0;
    Calendar d1 = Calendar.getInstance();
    Calendar d2 = Calendar.getInstance();
    d1.setTime(parseDate(starDate));
    d2.setTime(parseDate(endDate));

    // 日期大小翻轉
    if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
        java.util.Calendar swap = d1;
        d1 = d2;
        d2 = swap;
    }
    int yy = d2.get(Calendar.YEAR) - d1.get(Calendar.YEAR);
    int mm = d2.get(Calendar.MONTH) - d1.get(Calendar.MONTH);
    if (mm < 0) {
        result = yy - 1;
    }
    if (mm > 0) {
        result = yy;
    }
    if (mm == 0) {
        if ((d2.getTimeInMillis() - d1.getTimeInMillis()) >= 0) {
            result = yy;
        } else {
            result = yy - 1;
        }
    }
    return result;
}

// 獲取年齡
public static int getAgeByBirth(String starDate) {
    return dateDiffYear(starDate, getCurrentDate());
}

}

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章