Java日期時間操作函數代碼 – JAVA編程語言程序開發技術文章

Java代碼

/**

日期類

* @date  

* @version 1.0

*/ 

import java.util.*; 

import java.text.*; 

import java.util.Calendar; 

  

public class VeDate { 

 /**

  * 獲取現在時間

  *

  * @return 返回時間類型yyyy-MM-dd HH:mm:ss

  */ 

 public static Date getNowDate() { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

  String dateString = formatter.format(currentTime); 

  ParsePosition pos = new ParsePosition(8); 

  Date currentTime_2 = formatter.parse(dateString, pos); 

  return currentTime_2; 

 } 

  

 /**

  * 獲取現在時間

  *

  * @return返回短時間格式yyyy-MM-dd

  */ 

 public static Date getNowDateShort() { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

  String dateString = formatter.format(currentTime); 

  ParsePosition pos = new ParsePosition(8); 

  Date currentTime_2 = formatter.parse(dateString, pos); 

  return currentTime_2; 

 } 

  

 /**

  * 獲取現在時間

  *

  * @return返回字符串格式yyyy-MM-dd HH:mm:ss

  */ 

 public static String getStringDate() { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

  String dateString = formatter.format(currentTime); 

  return dateString; 

 } 

  

 /**

  * 獲取現在時間

  *

  * @return 返回短時間字符串格式yyyy-MM-dd

  */ 

 public static String getStringDateShort() { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

  String dateString = formatter.format(currentTime); 

  return dateString; 

 } 

  

 /**

  * 獲取時間 小時:分;秒HH:mm:ss

  *

  * @return

  */ 

 public static String getTimeShort() { 

  SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 

  Date currentTime = new Date(); 

  String dateString = formatter.format(currentTime); 

  return dateString; 

 } 

  

 /**

  * 將長時間格式字符串轉換為時間yyyy-MM-dd HH:mm:ss

  *

  * @param strDate

  * @return

  */ 

 public static Date strToDateLong(String strDate) { 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

  ParsePosition pos = new ParsePosition(0); 

  Date strtodate = formatter.parse(strDate, pos); 

  return strtodate; 

 } 

  

 /**

  * 將長時間格式時間轉換為字符串yyyy-MM-dd HH:mm:ss

  *

  * @param dateDate

  * @return

  */ 

 public static String dateToStrLong(java.util.Date dateDate) { 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

  String dateString = formatter.format(dateDate); 

  return dateString; 

 } 

  

 /**

  * 將短時間格式時間轉換為字符串yyyy-MM-dd

  *

  * @param dateDate

  * @param k

  * @return

  */ 

 public static String dateToStr(java.util.Date dateDate) { 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

  String dateString = formatter.format(dateDate); 

  return dateString; 

 } 

  

 /**

  * 將短時間格式字符串轉換為時間yyyy-MM-dd

  *

  * @param strDate

  * @return

  */ 

 public static Date strToDate(String strDate) { 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

  ParsePosition pos = new ParsePosition(0); 

  Date strtodate = formatter.parse(strDate, pos); 

  return strtodate; 

 } 

  

 /**

  * 得到現在時間

  *

  * @return

  */ 

 public static Date getNow() { 

  Date currentTime = new Date(); 

  return currentTime; 

 } 

  

 /**

  * 提取一個月中的最後一天

  *

  * @param day

  * @return

  */ 

 public static Date getLastDate(long day) { 

  Date date = new Date(); 

  long date_3_hm = date.getTime() – 3600000 * 34 * day; 

  Date date_3_hm_date = new Date(date_3_hm); 

  return date_3_hm_date; 

 } 

  

 /**

  * 得到現在時間

  *

  * @return 字符串yyyyMMdd HHmmss

  */ 

 public static String getStringToday() { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss"); 

  String dateString = formatter.format(currentTime); 

  return dateString; 

 } 

  

 /**

  * 得到現在小時

  */ 

 public static String getHour() { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

  String dateString = formatter.format(currentTime); 

  String hour; 

  hour = dateString.substring(11, 13); 

  return hour; 

 } 

  

 /**

  * 得到現在分鐘

  *

  * @return

  */ 

 public static String getTime() { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

  String dateString = formatter.format(currentTime); 

  String min; 

  min = dateString.substring(14, 16); 

  return min; 

 } 

  

 /**

  * 根據用戶傳入的時間表示格式,返回當前時間的格式 如果是yyyyMMdd,註意字母y不能大寫。

  *

  * @param sformat

  *            yyyyMMddhhmmss

  * @return

  */ 

 public static String getUserDate(String sformat) { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat(sformat); 

  String dateString = formatter.format(currentTime); 

  return dateString; 

 } 

  

 /**

  * 二個小時時間間的差值,必須保證二個時間都是"HH:MM"的格式,返回字符型的分鐘

  */ 

 public static String getTwoHour(String st1, String st2) { 

  String[] kk = null; 

  String[] jj = null; 

  kk = st1.split(":"); 

  jj = st2.split(":"); 

  if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0])) 

   return "0"; 

  else { 

   double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60; 

   double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60; 

   if ((y – u) > 0) 

    return y – u + ""; 

   else 

    return "0"; 

  } 

 } 

  

 /**

  * 得到二個日期間的間隔天數

  */ 

 public static String getTwoDay(String sj1, String sj2) { 

  SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); 

  long day = 0; 

  try { 

   java.util.Date date = myFormatter.parse(sj1); 

   java.util.Date mydate = myFormatter.parse(sj2); 

   day = (date.getTime() – mydate.getTime()) / (24 * 60 * 60 * 1000); 

  } catch (Exception e) { 

   return ""; 

  } 

  return day + ""; 

 } 

  

 /**

  * 時間前推或後推分鐘,其中JJ表示分鐘.

  */ 

 public static String getPreTime(String sj1, String jj) { 

  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

  String mydate1 = ""; 

  try { 

   Date date1 = format.parse(sj1); 

   long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60; 

   date1.setTime(Time * 1000); 

   mydate1 = format.format(date1); 

  } catch (Exception e) { 

  } 

  return mydate1; 

 } 

  

 /**

  * 得到一個時間延後或前移幾天的時間,nowdate為時間,delay為前移或後延的天數

  */ 

 public static String getNextDay(String nowdate, String delay) { 

  try{ 

  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 

  String mdate = ""; 

  Date d = strToDate(nowdate); 

  long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60; 

  d.setTime(myTime * 1000); 

  mdate = format.format(d); 

  return mdate; 

  }catch(Exception e){ 

   return ""; 

  } 

 } 

  

 /**

  * 判斷是否潤年

  *

  * @param ddate

  * @return

  */ 

 public static boolean isLeapYear(String ddate) { 

  

  /**

   * 詳細設計:1.被400整除是閏年,否則:2.不能被4整除則不是閏年3.能被4整除同時不能被100整除則是閏年

   * 3.能被4整除同時能被100整除則不是閏年

   */ 

  Date d = strToDate(ddate); 

  GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance(); 

  gc.setTime(d); 

  int year = gc.get(Calendar.YEAR); 

  if ((year % 400) == 0) 

   return true; 

  else if ((year % 4) == 0) { 

   if ((year % 100) == 0) 

    return false; 

   else 

    return true; 

  } else 

   return false; 

 } 

  

 /**

  * 返回美國時間格式26 Apr 2006

  *

  * @param str

  * @return

  */ 

 public static String getEDate(String str) { 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

  ParsePosition pos = new ParsePosition(0); 

  Date strtodate = formatter.parse(str, pos); 

  String j = strtodate.toString(); 

  String[] k = j.split(" "); 

  return k[2] + k[1].toUpperCase() + k[5].substring(2, 4); 

 } 

  

 /**

  * 獲取一個月的最後一天

  *

  * @param dat

  * @return

  */ 

 public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd 

  String str = dat.substring(0, 8); 

  String month = dat.substring(5, 7); 

  int mon = Integer.parseInt(month); 

  if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) { 

   str += "31"; 

  } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) { 

   str += "30"; 

  } else { 

   if (isLeapYear(dat)) { 

    str += "29"; 

   } else { 

    str += "28"; 

   } 

  } 

  return str; 

 } 

  

 /**

  * 判斷二個時間是否在同一個周

  *

  * @param date1

  * @param date2

  * @return

  */ 

 public static boolean isSameWeekDates(Date date1, Date date2) { 

  Calendar cal1 = Calendar.getInstance(); 

  Calendar cal2 = Calendar.getInstance(); 

  cal1.setTime(date1); 

  cal2.setTime(date2); 

  int subYear = cal1.get(Calendar.YEAR) – cal2.get(Calendar.YEAR); 

  if (0 == subYear) { 

   if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) 

    return true; 

  } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) { 

   // 如果12月的最後一周橫跨來年第一周的話則最後一周即算做來年的第一周

   if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) 

    return true; 

  } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) { 

   if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) 

    return true; 

  } 

  return false; 

 } 

  

 /**

  * 產生周序列,即得到當前時間所在的年度是第幾周

  *

  * @return

  */ 

 public static String getSeqWeek() { 

  Calendar c = Calendar.getInstance(Locale.CHINA); 

  String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR)); 

  if (week.length() == 1) 

   week = "0" + week; 

  String year = Integer.toString(c.get(Calendar.YEAR)); 

  return year + week; 

 } 

  

 /**

  * 獲得一個日期所在的周的星期幾的日期,如要找出2002年2月3日所在周的星期一是幾號

  *

  * @param sdate

  * @param num

  * @return

  */ 

 public static String getWeek(String sdate, String num) { 

  // 再轉換為時間

  Date dd = VeDate.strToDate(sdate); 

  Calendar c = Calendar.getInstance(); 

  c.setTime(dd); 

  if (num.equals("1")) // 返回星期一所在的日期

   c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 

  else if (num.equals("2")) // 返回星期二所在的日期

   c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 

  else if (num.equals("3")) // 返回星期三所在的日期

   c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); 

  else if (num.equals("4")) // 返回星期四所在的日期

   c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY); 

  else if (num.equals("5")) // 返回星期五所在的日期

   c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 

  else if (num.equals("6")) // 返回星期六所在的日期

   c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); 

  else if (num.equals("0")) // 返回星期日所在的日期

   c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 

  return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); 

 } 

  

 /**

  * 根據一個日期,返回是星期幾的字符串

  *

  * @param sdate

  * @return

  */ 

 public static String getWeek(String sdate) { 

  // 再轉換為時間

  Date date = VeDate.strToDate(sdate); 

  Calendar c = Calendar.getInstance(); 

  c.setTime(date); 

  // int hour=c.get(Calendar.DAY_OF_WEEK); 

  // hour中存的就是星期幾瞭,其范圍1~7 

  // 1=星期日7=星期六,其他類推

  return new SimpleDateFormat("EEEE").format(c.getTime()); 

 } 

 public static String getWeekStr(String sdate){ 

  String str = ""; 

  str = VeDate.getWeek(sdate); 

  if("1".equals(str)){ 

   str = "星期日"; 

  }else if("2".equals(str)){ 

   str = "星期一"; 

  }else if("3".equals(str)){ 

   str = "星期二"; 

  }else if("4".equals(str)){ 

   str = "星期三"; 

  }else if("5".equals(str)){ 

   str = "星期四"; 

  }else if("6".equals(str)){ 

   str = "星期五"; 

  }else if("7".equals(str)){ 

   str = "星期六"; 

  } 

  return str; 

 } 

  

 /**

  * 兩個時間之間的天數

  *

  * @param date1

  * @param date2

  * @return

  */ 

 public static long getDays(String date1, String date2) { 

  if (date1 == null || date1.equals("")) 

   return 0; 

  if (date2 == null || date2.equals("")) 

   return 0; 

  // 轉換為標準時間

  SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); 

  java.util.Date date = null; 

  java.util.Date mydate = null; 

  try { 

   date = myFormatter.parse(date1); 

   mydate = myFormatter.parse(date2); 

  } catch (Exception e) { 

  } 

  long day = (date.getTime() – mydate.getTime()) / (24 * 60 * 60 * 1000); 

  return day; 

 } 

  

 /**

  * 形成如下的日歷 , 根據傳入的一個時間返回一個結構 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是當月的各個時間

  * 此函數返回該日歷第一行星期日所在的日期

  *

  * @param sdate

  * @return

  */ 

 public static String getNowMonth(String sdate) { 

  // 取該時間所在月的一號

  sdate = sdate.substring(0, 8) + "01"; 

  

  // 得到這個月的1號是星期幾

  Date date = VeDate.strToDate(sdate); 

  Calendar c = Calendar.getInstance(); 

  c.setTime(date); 

  int u = c.get(Calendar.DAY_OF_WEEK); 

  String newday = VeDate.getNextDay(sdate, (1 – u) + ""); 

  return newday; 

 } 

  

 /**

  * 取得數據庫主鍵 生成格式為yyyymmddhhmmss+k位隨機數

  *

  * @param k

  *            表示是取幾位隨機數,可以自己定

  */ 

  

 public static String getNo(int k) { 

  

  return getUserDate("yyyyMMddhhmmss") + getRandom(k); 

 } 

  

 /**

  * 返回一個隨機數

  *

  * @param i

  * @return

  */ 

 public static String getRandom(int i) { 

  Random jjj = new Random(); 

  // int suiJiShu = jjj.nextInt(9); 

  if (i == 0) 

   return ""; 

  String jj = ""; 

  for (int k = 0; k < i; k++) { 

   jj = jj + jjj.nextInt(9); 

  } 

  return jj; 

 } 

  

 /**

  *

  * @param args

  */ 

 public static boolean RightDate(String date) { 

  

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 

  ; 

  if (date == null) 

   return false; 

  if (date.length() > 10) { 

   sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 

  } else { 

   sdf = new SimpleDateFormat("yyyy-MM-dd"); 

  } 

  try { 

   sdf.parse(date); 

  } catch (ParseException pe) { 

   return false; 

  } 

  return true; 

 } 

  

 /***************************************************************************

  * //nd=1表示返回的值中包含年度//yf=1表示返回的值中包含月份//rq=1表示返回的值中包含日期//format表示返回的格式1

  * 以年月日中文返回2 以橫線-返回// 3 以斜線/返回4 以縮寫不帶其它符號形式返回// 5 以點號.返回

  **************************************************************************/ 

 public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) { 

  Date currentTime = new Date(); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

  String dateString = formatter.format(currentTime); 

  String s_nd = dateString.substring(0, 4); // 年份

  String s_yf = dateString.substring(5, 7); // 月份

  String s_rq = dateString.substring(8, 10); // 日期

  String sreturn = ""; 

  roc.util.MyChar mc = new roc.util.MyChar(); 

  if (sdate == null || sdate.equals("") || !mc.Isdate(sdate)) { // 處理空值情況

   if (nd.equals("1")) { 

    sreturn = s_nd; 

    // 處理間隔符

    if (format.equals("1")) 

     sreturn = sreturn + "年"; 

    else if (format.equals("2")) 

     sreturn = sreturn + "-"; 

    else if (format.equals("3")) 

     sreturn = sreturn + "/"; 

    else if (format.equals("5")) 

     sreturn = sreturn + "."; 

   } 

   // 處理月份

   if (yf.equals("1")) { 

    sreturn = sreturn + s_yf; 

    if (format.equals("1")) 

     sreturn = sreturn + "月"; 

    else if (format.equals("2")) 

     sreturn = sreturn + "-"; 

    else if (format.equals("3")) 

     sreturn = sreturn + "/"; 

    else if (format.equals("5")) 

     sreturn = sreturn + "."; 

   } 

   // 處理日期

   if (rq.equals("1")) { 

    sreturn = sreturn + s_rq; 

    if (format.equals("1")) 

     sreturn = sreturn + "日"; 

   } 

  } else { 

   // 不是空值,也是一個合法的日期值,則先將其轉換為標準的時間格式

   sdate = roc.util.RocDate.getOKDate(sdate); 

   s_nd = sdate.substring(0, 4); // 年份

   s_yf = sdate.substring(5, 7); // 月份

   s_rq = sdate.substring(8, 10); // 日期

   if (nd.equals("1")) { 

    sreturn = s_nd; 

    // 處理間隔符

    if (format.equals("1")) 

     sreturn = sreturn + "年"; 

    else if (format.equals("2")) 

     sreturn = sreturn + "-"; 

    else if (format.equals("3")) 

     sreturn = sreturn + "/"; 

    else if (format.equals("5")) 

     sreturn = sreturn + "."; 

   } 

   // 處理月份

   if (yf.equals("1")) { 

    sreturn = sreturn + s_yf; 

    if (format.equals("1")) 

     sreturn = sreturn + "月"; 

    else if (format.equals("2")) 

     sreturn = sreturn + "-"; 

    else if (format.equals("3")) 

     sreturn = sreturn + "/"; 

    else if (format.equals("5")) 

     sreturn = sreturn + "."; 

   } 

   // 處理日期

   if (rq.equals("1")) { 

    sreturn = sreturn + s_rq; 

    if (format.equals("1")) 

     sreturn = sreturn + "日"; 

   } 

  } 

  return sreturn; 

 } 

  

 public static String getNextMonthDay(String sdate, int m) { 

  sdate = getOKDate(sdate); 

  int year = Integer.parseInt(sdate.substring(0, 4)); 

  int month = Integer.parseInt(sdate.substring(5, 7)); 

  month = month + m; 

  if (month < 0) { 

   month = month + 12; 

   year = year – 1; 

  } else if (month > 12) { 

   month = month – 12; 

   year = year + 1; 

  } 

  String smonth = ""; 

  if (month < 10) 

   smonth = "0" + month; 

  else 

   smonth = "" + month; 

  return year + "-" + smonth + "-10"; 

 } 

  

 public static String getOKDate(String sdate) { 

  if (sdate == null || sdate.equals("")) 

   return getStringDateShort(); 

  

  if (!VeStr.Isdate(sdate)) { 

   sdate = getStringDateShort(); 

  } 

  // 將“/”轉換為“-”

  sdate = VeStr.Replace(sdate, "/", "-"); 

  // 如果隻有8位長度,則要進行轉換

  if (sdate.length() == 8) 

   sdate = sdate.substring(0, 4) + "-" + sdate.substring(4, 6) + "-" + sdate.substring(6, 8); 

  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

  ParsePosition pos = new ParsePosition(0); 

  Date strtodate = formatter.parse(sdate, pos); 

  String dateString = formatter.format(strtodate); 

  return dateString; 

 } 

  

 public static void main(String[] args) throws Exception { 

  try { 

   //System.out.print(Integer.valueOf(getTwoDay("2006-11-03 12:22:10", "2006-11-02 11:22:09"))); 

  } catch (Exception e) { 

   throw new Exception(); 

  } 

  //System.out.println("sss"); 

 } 

}   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *