java(日期處理)
轉載自:http://whp0731.iteye.com/blog/352388
java(日期處理)
第一部分關於JAVA的Date (參考關於JAVA的Date總結)
- 1.計算某一月份的最大天數
- Calendar time=Calendar.getInstance();
- time.clear();
- time.set(Calendar.YEAR,year); //year 為 int
- time.set(Calendar.MONTH,i-1);//注意,Calendar物件預設一月為0
- int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數
- 注:在使用set方法之前,必須先clear一下,否則很多資訊會繼承自系統當前時間
- 2.Calendar和Date的轉化
- (1) Calendar轉化為Date
- Calendar cal=Calendar.getInstance();
- Date date=cal.getTime();
- (2) Date轉化為Calendar
- Date date=new Date();
- Calendar cal=Calendar.getInstance();
- cal.setTime(date);
- 3.格式化輸出日期時間 (這個用的比較多)
- Date date=new Date();
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- String time=df.format(date);
- System.out.println(time);
- 4.計算一年中的第幾星期
- (1)計算某一天是一年中的第幾星期
- Calendar cal=Calendar.getInstance();
- cal.set(Calendar.YEAR, 2006);
- cal.set(Calendar.MONTH,;
- cal.set(Calendar.DAY_OF_MONTH, 3);
- int weekno=cal.get(Calendar.WEEK_OF_YEAR);
- (2)計算一年中的第幾星期是幾號
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
- Calendar cal=Calendar.getInstance();
- cal.set(Calendar.YEAR, 2006);
- cal.set(Calendar.WEEK_OF_YEAR, 1);
- cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
- System.out.println(df.format(cal.getTime()));
- 輸出:
- 2006-01-02
- 5.add()和roll()的用法(不太常用)
- (1)add()方法
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
- Calendar cal=Calendar.getInstance();
- cal.set(Calendar.YEAR, 2006);
- cal.set(Calendar.MONTH,;
- cal.set(Calendar.DAY_OF_MONTH, 3);
- cal.add(Calendar.DATE, -4);
- Date date=cal.getTime();
- System.out.println(df.format(date));
- cal.add(Calendar.DATE, 4);
- date=cal.getTime();
- System.out.println(df.format(date));
- 輸出:
- 2006-08-30
- 2006-09-03
- (2)roll方法
- cal.set(Calendar.YEAR, 2006);
- cal.set(Calendar.MONTH,;
- cal.set(Calendar.DAY_OF_MONTH, 3);
- cal.roll(Calendar.DATE, -4);
- date=cal.getTime();
- System.out.println(df.format(date));
- cal.roll(Calendar.DATE, 4);
- date=cal.getTime();
- System.out.println(df.format(date));
- 輸出:
- 2006-09-29
- 2006-09-03
- 可見,roll()方法在本月內迴圈,一般使用add()方法;
- 6.計算兩個任意時間中間的間隔天數(這個比較常用)
- (1)傳進Calendar物件
- public int getIntervalDays(Calendar startday,Calendar endday)...{
- if(startday.after(endday))...{
- Calendar cal=startday;
- startday=endday;
- endday=cal;
- }
- long sl=startday.getTimeInMillis();
- long el=endday.getTimeInMillis();
- long ei=el-sl;
- return (int)(ei/(1000*60*60*24));
- }
- (2)傳進Date物件
- public int getIntervalDays(Date startday,Date endday)...{
- if(startday.after(endday))...{
- Date cal=startday;
- startday=endday;
- endday=cal;
- }
- long sl=startday.getTime();
- long el=endday.getTime();
- long ei=el-sl;
- return (int)(ei/(1000*60*60*24));
- }
- (3)改進精確計算相隔天數的方法
- public int getDaysBetween (Calendar d1,Calendar d2) ...{
- if (d1.after(d2)) ...{
- java.util.Calendar swap = d1;
- d1 = d2;
- d2 = swap;
- }
- int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
- int y2 = d2.get(Calendar.YEAR);
- if (d1.get(Calendar.YEAR) != y2) ...{
- d1 = (Calendar) d1.clone();
- do ...{
- days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數
- d1.add(Calendar.YEAR, 1);
- } while (d1.get(Calendar.YEAR) != y2);
- }
- return days;
- }
- 注意:通過上面的方法可以衍生出求任何時間,如要查出郵箱三週之內收到的郵件(得到當前系統時間-再得到三週前時間)用收件的時間去匹配 最好裝化成 long去比較
- 如:1年前日期(注意毫秒的轉換)
- java.util.Date myDate=new java.util.Date();
- long myTime=(myDate.getTime()/1000)-60*60*24*365;
- myDate.setTime(myTime*1000);
- String mDate=formatter.format(myDate);
- 7. String 和 Date ,Long 之間相互轉換 (最常用)
- 字串轉化成時間型別(字串可以是任意型別,只要和SimpleDateFormat中的格式一致即可)
- 通常我們取時間跨度的時候,會substring出具體時間--long-比較
- java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
- java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
- long dvalue=d.getTime();
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String mDateTime1=formatter.format(d);
- 8. 通過時間求時間
- 年月周求日期
- >SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
- java.util.Date date2= formatter2.parse("2003-05 5 星期五");
- SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
- String mydate2=formatter3.format(date2);
- 求是星期幾
- mydate= myFormatter.parse("2001-1-1");
- SimpleDateFormat formatter4 = new SimpleDateFormat("E");
- String mydate3=formatter4.format(mydate);
- 9. java 和 具體的資料庫結合
- 在開發web應用中,針對不同的資料庫日期型別,我們需要在我們的程式中對日期型別做各種不同的轉換。若對應資料庫資料是oracle的Date型別,即只需要年月日的,可以選擇使用java.sql.Date型別,若對應的是MSsqlserver 資料庫的DateTime型別,即需要年月日時分秒的,選擇java.sql.Timestamp型別
- 你可以使用dateFormat定義時間日期的格式,轉一個字串即可
- class Datetest{
- *method 將字串型別的日期轉換為一個timestamp(時間戳記java.sql.Timestamp)
- *@param dateString 需要轉換為timestamp的字串
- *@return dataTime timestamp
- public final static java.sql.Timestamp string2Time(String dateString)
- throws java.text.ParseException {
- DateFormat dateFormat;
- dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//設定格式
- //dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
- dateFormat.setLenient(false);
- java.util.Date timeDate = dateFormat.parse(dateString);//util型別
- java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp型別,timeDate.getTime()返回一個long型
- return dateTime;
- }
- *method 將字串型別的日期轉換為一個Date(java.sql.Date)
- *@param dateString 需要轉換為Date的字串
- *@return dataTime Date
- public final static java.sql.Date string2Date(String dateString)
- throws java.lang.Exception {
- DateFormat dateFormat;
- dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
- dateFormat.setLenient(false);
- java.util.Date timeDate = dateFormat.parse(dateString);//util型別
- java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql型別
- return dateTime;
- }
- public static void main(String[] args){
- Date da = new Date();
- 注意:這個地方da.getTime()得到的是一個long型的值
- System.out.println(da.getTime());
- 由日期date轉換為timestamp
- 第一種方法:使用new Timestamp(long)
- Timestamp t = new Timestamp(new Date().getTime());
- />System.out.println(t);
- 第二種方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
- Timestamp tt = new Timestamp(Calendar.getInstance().get(
- Calendar.YEAR) - 1900, Calendar.getInstance().get(
- Calendar.MONTH), Calendar.getInstance().get(
- Calendar.DATE), Calendar.getInstance().get(
- Calendar.HOUR), Calendar.getInstance().get(
- Calendar.MINUTE), Calendar.getInstance().get(
- Calendar.SECOND), 0);
- System.out.println(tt);
- try {
- String sToDate = "2005-8-18";//用於轉換成java.sql.Date的字串
- String sToTimestamp = "2005-8-18 14:21:12.123";//用於轉換成java.sql.Timestamp的字串
- Date date1 = string2Date(sToDate);
- Timestamp date2 = string2Time(sToTimestamp);
- System.out.println("Date:"+date1.toString());//結果顯示
- System.out.println("Timestamp:"+date2.toString());//結果顯示
- }catch(Exception e) {
- e.printStackTrace();
- }
- }
- }
1.計算某一月份的最大天數
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year); //year 為 int
time.set(Calendar.MONTH,i-1);//注意,Calendar物件預設一月為0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數
注:在使用set方法之前,必須先clear一下,否則很多資訊會繼承自系統當前時間
2.Calendar和Date的轉化
(1) Calendar轉化為Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date轉化為Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3.格式化輸出日期時間 (這個用的比較多)
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time=df.format(date);
System.out.println(time);
4.計算一年中的第幾星期
(1)計算某一天是一年中的第幾星期
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH,;
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)計算一年中的第幾星期是幾號
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
輸出:
2006-01-02
5.add()和roll()的用法(不太常用)
(1)add()方法
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH,;
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
輸出:
2006-08-30
2006-09-03
(2)roll方法
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH,;
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
輸出:
2006-09-29
2006-09-03
可見,roll()方法在本月內迴圈,一般使用add()方法;
6.計算兩個任意時間中間的間隔天數(這個比較常用)
(1)傳進Calendar物件
public int getIntervalDays(Calendar startday,Calendar endday)...{
if(startday.after(endday))...{
Calendar cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTimeInMillis();
long el=endday.getTimeInMillis();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(2)傳進Date物件
public int getIntervalDays(Date startday,Date endday)...{
if(startday.after(endday))...{
Date cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(3)改進精確計算相隔天數的方法
public int getDaysBetween (Calendar d1,Calendar d2) ...{
if (d1.after(d2)) ...{
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) ...{
d1 = (Calendar) d1.clone();
do ...{
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
注意:通過上面的方法可以衍生出求任何時間,如要查出郵箱三週之內收到的郵件(得到當前系統時間-再得到三週前時間)用收件的時間去匹配 最好裝化成 long去比較
如:1年前日期(注意毫秒的轉換)
java.util.Date myDate=new java.util.Date();
long myTime=(myDate.getTime()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate=formatter.format(myDate);
7. String 和 Date ,Long 之間相互轉換 (最常用)
字串轉化成時間型別(字串可以是任意型別,只要和SimpleDateFormat中的格式一致即可)
通常我們取時間跨度的時候,會substring出具體時間--long-比較
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
long dvalue=d.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1=formatter.format(d);
8. 通過時間求時間
年月周求日期
>SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
java.util.Date date2= formatter2.parse("2003-05 5 星期五");
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
String mydate2=formatter3.format(date2);
求是星期幾
mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
String mydate3=formatter4.format(mydate);
9. java 和 具體的資料庫結合
在開發web應用中,針對不同的資料庫日期型別,我們需要在我們的程式中對日期型別做各種不同的轉換。若對應資料庫資料是oracle的Date型別,即只需要年月日的,可以選擇使用java.sql.Date型別,若對應的是MSsqlserver 資料庫的DateTime型別,即需要年月日時分秒的,選擇java.sql.Timestamp型別
你可以使用dateFormat定義時間日期的格式,轉一個字串即可
class Datetest{
*method 將字串型別的日期轉換為一個timestamp(時間戳記java.sql.Timestamp)
*@param dateString 需要轉換為timestamp的字串
*@return dataTime timestamp
public final static java.sql.Timestamp string2Time(String dateString)
throws java.text.ParseException {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//設定格式
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util型別
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp型別,timeDate.getTime()返回一個long型
return dateTime;
}
*method 將字串型別的日期轉換為一個Date(java.sql.Date)
*@param dateString 需要轉換為Date的字串
*@return dataTime Date
public final static java.sql.Date string2Date(String dateString)
throws java.lang.Exception {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util型別
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql型別
return dateTime;
}
public static void main(String[] args){
Date da = new Date();
注意:這個地方da.getTime()得到的是一個long型的值
System.out.println(da.getTime());
由日期date轉換為timestamp
第一種方法:使用new Timestamp(long)
Timestamp t = new Timestamp(new Date().getTime());
/>System.out.println(t);
第二種方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
Timestamp tt = new Timestamp(Calendar.getInstance().get(
Calendar.YEAR) - 1900, Calendar.getInstance().get(
Calendar.MONTH), Calendar.getInstance().get(
Calendar.DATE), Calendar.getInstance().get(
Calendar.HOUR), Calendar.getInstance().get(
Calendar.MINUTE), Calendar.getInstance().get(
Calendar.SECOND), 0);
System.out.println(tt);
try {
String sToDate = "2005-8-18";//用於轉換成java.sql.Date的字串
String sToTimestamp = "2005-8-18 14:21:12.123";//用於轉換成java.sql.Timestamp的字串
Date date1 = string2Date(sToDate);
Timestamp date2 = string2Time(sToTimestamp);
System.out.println("Date:"+date1.toString());//結果顯示
System.out.println("Timestamp:"+date2.toString());//結果顯示
}catch(Exception e) {
e.printStackTrace();
}
}
}
第二部分Date工具類(參考一個總結好的很好的關於JAVA的Date工具類)
- <SPAN style="BACKGROUND-COLOR: #ffffff">public class DateUtil
- {
- //預設顯示日期的格式
- public static final String DATAFORMAT_STR = "yyyy-MM-dd";
- //預設顯示日期的格式
- public static final String YYYY_MM_DATAFORMAT_STR = "yyyy-MM";
- //預設顯示日期時間的格式
- public static final String DATATIMEF_STR = "yyyy-MM-dd HH:mm:ss";
- //預設顯示簡體中文日期的格式
- public static final String ZHCN_DATAFORMAT_STR = "yyyy年MM月dd日";
- //預設顯示簡體中文日期時間的格式
- public static final String ZHCN_DATATIMEF_STR = "yyyy年MM月dd日HH時mm分ss秒";
- //預設顯示簡體中文日期時間的格式
- public static final String ZHCN_DATATIMEF_STR_4yMMddHHmm = "yyyy年MM月dd日HH時mm分";
- private static DateFormat dateFormat = null;
- private static DateFormat dateTimeFormat = null;
- private static DateFormat zhcnDateFormat = null;
- private static DateFormat zhcnDateTimeFormat = null;
- static
- {
- dateFormat = new SimpleDateFormat(DATAFORMAT_STR);
- dateTimeFormat = new SimpleDateFormat(DATATIMEF_STR);
- zhcnDateFormat = new SimpleDateFormat(ZHCN_DATAFORMAT_STR);
- zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_DATATIMEF_STR);
- }
- private static DateFormat getDateFormat(String formatStr)
- {
- if (formatStr.equalsIgnoreCase(DATAFORMAT_STR))
- {
- return dateFormat;
- }
- else
- if (formatStr.equalsIgnoreCase(DATATIMEF_STR))
- {
- return dateTimeFormat;
- }
- else
- if (formatStr.equalsIgnoreCase(ZHCN_DATAFORMAT_STR))
- {
- return zhcnDateFormat;
- }
- else
- if (formatStr.equalsIgnoreCase(ZHCN_DATATIMEF_STR))
- {
- return zhcnDateTimeFormat;
- }
- else
- {
- return new SimpleDateFormat(formatStr);
- }
- }
- /**
- * 按照預設顯示日期時間的格式"yyyy-MM-dd HH:mm:ss",轉化dateTimeStr為Date型別
- * dateTimeStr必須是"yyyy-MM-dd HH:mm:ss"的形式
- * @param dateTimeStr
- * @return
- */
- public static Date getDate(String dateTimeStr)
- {
- return getDate(dateTimeStr, DATATIMEF_STR);
- }
- /**
- * 按照預設formatStr的格式,轉化dateTimeStr為Date型別
- * dateTimeStr必須是formatStr的形式
- * @param dateTimeStr
- * @param formatStr
- * @return
- */
- public static Date getDate(String dateTimeStr, String formatStr)
- {
- try
- {
- if (dateTimeStr == null || dateTimeStr.equals(""))
- {
- return null;
- }
- DateFormat sdf = getDateFormat(formatStr);
- java.util.Date d = sdf.parse(dateTimeStr);
- return d;
- }
- catch (ParseException e)
- {
- throw new RuntimeException(e);
- }
- }
- /**
- * 將YYYYMMDD轉換成Date日期
- * @param date
- * @return
- * @throws BusinessException
- */
- public static Date transferDate(String date) throws Exception
- {
- if (date == null || date.length() < 1)
- return null;
- if (date.length() != 8)
- throw new Exception("日期格式錯誤");
- String con = "-";
- String yyyy = date.substring(0, 4);
- String mm = date.substring(4, 6);
- String dd = date.substring(6, 8);
- int month = Integer.parseInt(mm);
- int day = Integer.parseInt(dd);
- if (month < 1 || month > 12 || day < 1 || day > 31)
- throw new Exception("日期格式錯誤");
- String str = yyyy + con + mm + con + dd;
- return DateUtil.getDate(str, DateUtil.DATAFORMAT_STR);
- }
- /**
- * 將YYYY-MM-DD日期轉換成yyyymmdd格式字串
- * @param date
- * @return
- */
- public static String getYYYYMMDDDate(Date date)
- {
- if (date == null)
- return null;
- String yyyy = getYear(date) + "";
- String mm = getMonth(date) + "";
- String dd = getDay(date) + "";
- mm = StringUtil.rightAlign(mm, 2, "0");
- dd = StringUtil.rightAlign(dd, 2, "0");
- return yyyy + mm + dd;
- }
- /**
- * 將YYYY-MM-DD日期轉換成YYYYMMDDHHMMSS格式字串
- * @param date
- * @return
- */
- public static String getYYYYMMDDHHMMSSDate(Date date)
- {
- if (date == null)
- return null;
- String yyyy = getYear(date) + "";
- String mm = getMonth(date) + "";
- String dd = getDay(date) + "";
- String hh = getHour(date) + "";
- String min = getMin(date) + "";
- String ss = getSecond(date) + "";
- mm = StringUtil.rightAlign(mm, 2, "0");
- dd = StringUtil.rightAlign(dd, 2, "0");
- hh = StringUtil.rightAlign(hh, 2, "0");
- min = StringUtil.rightAlign(min, 2, "0");
- ss = StringUtil.rightAlign(ss, 2, "0");
- return yyyy + mm + dd + hh + min + ss;
- }
- /**
- * 將YYYY-MM-DD日期轉換成yyyymmdd格式字串
- * @param date
- * @return
- */
- public static String getYYYYMMDDDate(String date)
- {
- return getYYYYMMDDDate(getDate(date, DATAFORMAT_STR));
- }
- /**
- * 將Date轉換成字串“yyyy-mm-dd hh:mm:ss”的字串
- * @param date
- * @return
- */
- public static String dateToDateString(Date date)
- {
- return dateToDateString(date, DATATIMEF_STR);
- }
- /**
- * 將Date轉換成formatStr格式的字串
- * @param date
- * @param formatStr
- * @return
- */
- public static String dateToDateString(Date date, String formatStr)
- {
- DateFormat df = getDateFormat(formatStr);
- return df.format(date);
- }
- /**
- * 返回一個yyyy-MM-dd HH:mm:ss 形式的日期時間字串中的HH:mm:ss
- * @param dateTime
- * @return
- */
- public static String getTimeString(String dateTime)
- {
- return getTimeString(dateTime, DATATIMEF_STR);
- }
- /**
- * 返回一個formatStr格式的日期時間字串中的HH:mm:ss
- * @param dateTime
- * @param formatStr
- * @return
- */
- public static String getTimeString(String dateTime, String formatStr)
- {
- Date d = getDate(dateTime, formatStr);
- String s = dateToDateString(d);
- return s.substring(DATATIMEF_STR.indexOf('H'));
- }
- /**
- * 獲取當前日期yyyy-MM-dd的形式
- * @return
- */
- public static String getCurDate()
- {
- //return dateToDateString(new Date(),DATAFORMAT_STR);
- return dateToDateString(Calendar.getInstance().getTime(), DATAFORMAT_STR);
- }
- /**
- * 獲取當前日期yyyy年MM月dd日的形式
- * @return
- */
- public static String getCurZhCNDate()
- {
- return dateToDateString(new Date(), ZHCN_DATAFORMAT_STR);
- }
- /**
- * 獲取當前日期時間yyyy-MM-dd HH:mm:ss的形式
- * @return
- */
- public static String getCurDateTime()
- {
- return dateToDateString(new Date(), DATATIMEF_STR);
- }
- /**
- * 獲取當前日期時間yyyy年MM月dd日HH時mm分ss秒的形式
- * @return
- */
- public static String getCurZhCNDateTime()
- {
- return dateToDateString(new Date(), ZHCN_DATATIMEF_STR);
- }
- /**
- * 獲取日期d的days天后的一個Date
- * @param d
- * @param days
- * @return
- */
- public static Date getInternalDateByDay(Date d, int days)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- now.add(Calendar.DATE, days);
- return now.getTime();
- }
- public static Date getInternalDateByMon(Date d, int months)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- now.add(Calendar.MONTH, months);
- return now.getTime();
- }
- public static Date getInternalDateByYear(Date d, int years)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- now.add(Calendar.YEAR, years);
- return now.getTime();
- }
- public static Date getInternalDateBySec(Date d, int sec)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- now.add(Calendar.SECOND, sec);
- return now.getTime();
- }
- public static Date getInternalDateByMin(Date d, int min)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- now.add(Calendar.MINUTE, min);
- return now.getTime();
- }
- public static Date getInternalDateByHour(Date d, int hours)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- now.add(Calendar.HOUR_OF_DAY, hours);
- return now.getTime();
- }
- /**
- * 根據一個日期字串,返回日期格式,目前支援4種
- * 如果都不是,則返回null
- * @param DateString
- * @return
- */
- public static String getFormateStr(String DateString)
- {
- String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"; //"yyyy-MM-dd"
- String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"; //"yyyy-MM-dd HH:mm:ss";
- String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日";//"yyyy年MM月dd日"
- String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}時[0-9]{1,2}分[0-9]{1,2}秒";//"yyyy年MM月dd日HH時mm分ss秒"
- Pattern p = Pattern.compile(patternStr1);
- Matcher m = p.matcher(DateString);
- boolean b = m.matches();
- if (b)
- return DATAFORMAT_STR;
- p = Pattern.compile(patternStr2);
- m = p.matcher(DateString);
- b = m.matches();
- if (b)
- return DATATIMEF_STR;
- p = Pattern.compile(patternStr3);
- m = p.matcher(DateString);
- b = m.matches();
- if (b)
- return ZHCN_DATAFORMAT_STR;
- p = Pattern.compile(patternStr4);
- m = p.matcher(DateString);
- b = m.matches();
- if (b)
- return ZHCN_DATATIMEF_STR;
- return null;
- }
- /**
- * 將一個"yyyy-MM-dd HH:mm:ss"字串,轉換成"yyyy年MM月dd日HH時mm分ss秒"的字串
- * @param dateStr
- * @return
- */
- public static String getZhCNDateTime(String dateStr)
- {
- Date d = getDate(dateStr);
- return dateToDateString(d, ZHCN_DATATIMEF_STR);
- }
- /**
- * 將一個"yyyy-MM-dd"字串,轉換成"yyyy年MM月dd日"的字串
- * @param dateStr
- * @return
- */
- public static String getZhCNDate(String dateStr)
- {
- Date d = getDate(dateStr, DATAFORMAT_STR);
- return dateToDateString(d, ZHCN_DATAFORMAT_STR);
- }
- /**
- * 將dateStr從fmtFrom轉換到fmtTo的格式
- * @param dateStr
- * @param fmtFrom
- * @param fmtTo
- * @return
- */
- public static String getDateStr(String dateStr, String fmtFrom, String fmtTo)
- {
- Date d = getDate(dateStr, fmtFrom);
- return dateToDateString(d, fmtTo);
- }
- /**
- * 比較兩個"yyyy-MM-dd HH:mm:ss"格式的日期,之間相差多少毫秒,time2-time1
- * @param time1
- * @param time2
- * @return
- */
- public static long compareDateStr(String time1, String time2)
- {
- Date d1 = getDate(time1);
- Date d2 = getDate(time2);
- return d2.getTime() - d1.getTime();
- }
- /**
- * 將小時數換算成返回以毫秒為單位的時間
- * @param hours
- * @return
- */
- public static long getMicroSec(BigDecimal hours)
- {
- BigDecimal bd;
- bd = hours.multiply(new BigDecimal(3600 * 1000));
- return bd.longValue();
- }
- /**
- * 獲取Date中的分鐘
- * @param d
- * @return
- */
- public static int getMin(Date d)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- return now.get(Calendar.MINUTE);
- }
- /**
- * 獲取Date中的小時(24小時)
- * @param d
- * @return
- */
- public static int getHour(Date d)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- return now.get(Calendar.HOUR_OF_DAY);
- }
- /**
- * 獲取Date中的秒
- * @param d
- * @return
- */
- public static int getSecond(Date d)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- return now.get(Calendar.SECOND);
- }
- /**
- * 獲取xxxx-xx-xx的日
- * @param d
- * @return
- */
- public static int getDay(Date d)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- return now.get(Calendar.DAY_OF_MONTH);
- }
- /**
- * 獲取月份,1-12月
- * @param d
- * @return
- */
- public static int getMonth(Date d)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- return now.get(Calendar.MONTH) + 1;
- }
- /**
- * 獲取19xx,20xx形式的年
- * @param d
- * @return
- */
- public static int getYear(Date d)
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- now.setTime(d);
- return now.get(Calendar.YEAR);
- }
- /**
- * 得到d的上個月的年份+月份,如200505
- * @return
- */
- public static String getYearMonthOfLastMon(Date d)
- {
- Date newdate = getInternalDateByMon(d, -1);
- String year = String.valueOf(getYear(newdate));
- String month = String.valueOf(getMonth(newdate));
- return year + month;
- }
- /**
- * 得到當前日期的年和月如200509
- * @return String
- */
- public static String getCurYearMonth()
- {
- Calendar now = Calendar.getInstance(TimeZone.getDefault());
- String DATE_FORMAT = "yyyyMM";
- java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
- sdf.setTimeZone(TimeZone.getDefault());
- return (sdf.format(now.getTime()));
- }
- public static Date getNextMonth(String year, String month)
- {
- String datestr = year + "-" + month + "-01";
- Date date = getDate(datestr, DATAFORMAT_STR);
- return getInternalDateByMon(date, 1);
- }
- public static Date getLastMonth(String year, String month)
- {
- String datestr = year + "-" + month + "-01";
- Date date = getDate(datestr, DATAFORMAT_STR);
- return getInternalDateByMon(date, -1);
- }
- /**
- * 得到日期d,按照頁面日期控制元件格式,如"2001-3-16"
- * @param d
- * @return
- */
- public static String getSingleNumDate(Date d)
- {
- return dateToDateString(d, DATAFORMAT_STR);
- }
- /**
- * 得到d半年前的日期,"yyyy-MM-dd"
- * @param d
- * @return
- */
- public static String getHalfYearBeforeStr(Date d)
- {
- return dateToDateString(getInternalDateByMon(d, -6), DATAFORMAT_STR);
- }
- /**
- * 得到當前日期D的月底的前/後若干天的時間,<0表示之前,>0表示之後
- * @param d
- * @param days
- * @return
- */
- public static String getInternalDateByLastDay(Date d, int days)
- {
- return dateToDateString(getInternalDateByDay(d, days), DATAFORMAT_STR);
- }
- /**
- * 日期中的年月日相加
- * @param field int 需要加的欄位 年 月 日
- * @param amount int 加多少
- * @return String
- */
- public static String addDate(int field, int amount)
- {
- int temp = 0;
- if (field == 1)
- {
- temp = Calendar.YEAR;
- }
- if (field == 2)
- {
- temp = Calendar.MONTH;
- }
- if (field == 3)
- {
- temp = Calendar.DATE;
- }
- String Time = "";
- try
- {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- Calendar cal = Calendar.getInstance(TimeZone.getDefault());
- cal.add(temp, amount);
- Time = sdf.format(cal.getTime());
- return Time;
- }
- catch (Exception e)
- {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 獲得系統當前月份的天數
- * @return
- */
- public static int getCurentMonthDay()
- {
- Date date = Calendar.getInstance().getTime();
- return getMonthDay(date);
- }
- /**
- * 獲得指定日期月份的天數
- * @return
- */
- public static int getMonthDay(Date date)
- {
- Calendar c = Calendar.getInstance();
- c.setTime(date);
- return c.getActualMaximum(Calendar.DAY_OF_MONTH);
- }
- /**
- * 獲得指定日期月份的天數 yyyy-mm-dd
- * @return
- */
- public static int getMonthDay(String date)
- {
- Date strDate = getDate(date, DATAFORMAT_STR);
- return getMonthDay(strDate);
- }
- public static String getStringDate(Calendar cal)
- {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- return format.format(cal.getTime());
- }
- /**
- * @param args
- */
- public static void main(String[] args)
- {
- // //System.out.print(DateUtil.getDate("04:04:04","HH:mm:ss"));
- // System.out.print("\n"+DateUtil.getCurZhCNDateTime());
- // System.out.print("\n"+getFormateStr(DateUtil.getCurDate()));
- // System.out.print("\n"+compareDateStr("1900-1-1 1:1:2","1900-1-1 1:1:3"));
- // System.out.print("\n"+getDay(new Date()));
- // System.out.print("\n"+getMonth(new Date()));
- // System.out.print("\n"+getYear(new Date()));
- // System.out.print("\n"+getMin(new Date()));
- //// System.out.print("\n"+new Date().getSeconds());
- /*Date d1 = new Date(2007,11,30);
- Date d2 = new Date(2007,12,1);
- if(d2.compareTo(d1)>0){
- System.out.println("d2大於d1");
- }else{
- System.out.println("d2小於d1");
- }*/
- System.out.println(addDate(1, 1));
- System.out.println(addDate(2, 1));
- System.out.println(addDate(3, 1));
- System.out.println(getYYYYMMDDHHMMSSDate(new Date()));
- System.out.println(getCurentMonthDay());
- }
- }
- </SPAN>
相關文章
- java localdate日期格式處理JavaLDA
- Java 8的18個常用日期處理Java
- Scala日期處理
- JavaUtils - 日期處理Java
- Hive 日期處理Hive
- Java SimpleDateFormat處理日期與字串的轉換JavaORM字串
- 【Util】java處理日期時間相加減大全Java
- jstl處理日期JS
- Java入門教程五(數字和日期處理)Java
- java日期時間各種變換及處理Java
- 【Java】全域性日期處理,包含LocalDate, LocalDateTime, DateJavaLDA
- JSP 日期處理概述JS
- Oracle非法日期 處理方案Oracle
- 在oracle中處理日期Oracle
- oracle日期處理集錦Oracle
- Pandas中時間和日期處理
- 日期時間處理包 Carbon
- Java 日期和時間 API:實用技巧與示例 - 輕鬆處理日期和時間JavaAPI
- Calendar類在Java中的應用與日期時間處理Java
- sql server對於日期的處理SQLServer
- 字串和日期時間的處理字串
- JDBC中Date日期物件的處理JDBC物件
- Laravel日期時間處理包 CarbonLaravel
- 幾個SQL 日期處理函式SQL函式
- 全網最全!徹底弄透Java處理GMT/UTC日期時間Java
- 關於Python中的日期處理Python
- joda jar日期處理類的學習JAR
- lubridate—輕鬆處理日期時間
- js日期物件相容性的處理JS物件
- 水庫斷面水位中--水勢顯示效果處理--日期處理 SQLSQL
- MySQL-日期和資料處理函式MySql函式
- 日期和時間的儲存與處理
- LocalDateTime替代Date操作處理日期時間LDA
- Clickhouse SQL日期處理函式及案例分享SQL函式
- Java處理emojiJava
- [工具]PHP 中的日期時間處理利器 – CarbonPHP
- laravel 使用maatwebsite/Excel 獲取的日期的處理LaravelWebExcel
- LocalDate,LocalDateTime和處理時間、日期工具類LDA