Java时间工具类详解编程语言

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 { 
 
  /** 
   * 将毫秒转成时间 
   */ 
  public static String getTimeMillisToDate(long l) { 
    Timestamp d = new Timestamp(l); 
    return d.toString().substring(0, 19); 
  } 
 
  /** 
   * 当前时间 
   *  
   * @return Timestamp 
   */ 
  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("EEEE").format(date.getTime()); 
  } 
 
  /** 
   * 获取指定时间的字符串,只到日期 
   *  
   * @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); 
      } 
    } 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 dt 
   * @return String 
   */ 
  public static String getLongDateFromShortDate(String dt) { 
    String strDT = dt; 
    try { 
      if (strDT != null && strDT.length() <= 10) { 
        strDT = dt.trim() + " 00:00:00"; 
      } 
    } catch (Exception ex) { 
      ex.printStackTrace(); 
    } 
    return strDT; 
  } 
 
  /** 
   *  
   * @param dt 
   * @return String 
   */ 
  public static String getShortDateToHHMM(String dt) { 
    String jDt = dt; 
    try { 
      if (jDt != null && jDt.length() <= 10) { 
        jDt = jDt + " 00:00"; 
      } 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
      jDt = sdf.parse(jDt).toLocaleString(); 
    } catch (Exception ex) { 
      ex.printStackTrace(); 
    } 
    return jDt; 
  } 
 
  /** 
   *  
   * @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); 
  } 
 
  public static void main(String[] args) { 
    System.out.println(System.currentTimeMillis()); 
  } 
 
  /** 
   * 获取当前日期之前的日期字符串 如 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()); 
  } 
}

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10177.html

(0)
上一篇 2021年7月19日 10:01
下一篇 2021年7月19日 10:01

相关推荐

发表回复

登录后才能评论