Date類型轉換

package test;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Test01 {

	/**
	 * 計算兩個日期相差的天數
	 * @param startday
	 * @param endday
	 * @return
	 */
	public static 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));
	}
	
	/**
	 * 計算兩個日期相差的天數
	 * @param startday
	 * @param endday
	 * @return
	 */
	public static int getIntervalDay(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));
	}
	
	/**
	 * 精確計算兩個日期相隔天數
	 * @param Calendar d1
	 * @param Calendar d2
	 * @return
	 */
	public static 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;
	}
	
	public static void main(String[] args) {
		
		/**
		 * Date轉換成Calendar
		 */
		System.out.println("--Date轉換成Calendar--");
		Date now = new Date();
		System.out.println(now);//輸出結果是:Wed Mar 04 10:38:38 CST 2015
		Calendar cal=Calendar.getInstance();
		cal.setTime(now);
		System.out.println(cal);//輸出結果是:java.util.GregorianCalendar[time=1425436718853,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2015,MONTH=2,WEEK_OF_YEAR=10,WEEK_OF_MONTH=1,DAY_OF_MONTH=4,DAY_OF_YEAR=63,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=38,SECOND=38,MILLISECOND=853,ZONE_OFFSET=28800000,DST_OFFSET=0]
		System.out.println("--------------------");
		System.out.println();
		
		/**
		 * Calendar轉換成date
		 */
		System.out.println("--Calendar轉換成date--");
		Calendar cale=Calendar.getInstance();
		Date date=cale.getTime();
		System.out.println(date);
		System.out.println("--------------------");
		System.out.println();
		
		/**
		 * Date格式化輸出日期時間
		 * 
		 * 注意:SimpleDateFormat類格式化一個字符串時,
		 * 可根據需要調用 format() 或 parse() 函數;只不過format()
		 * 返回String類型,parse()返回java.util.Date類型
		 */
		System.out.println("--Date格式化輸出日期時間--");
		SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		String time=df.format(now);
		System.out.println(time);			  //輸出結果是:2015-03-04 10:38:38
		System.out.println("--------------------");
		System.out.println();
		
		/**
		 * 字符串轉換成Date類型
		 */
		System.out.println("--字符串轉換成Date類型--");
		try {
			//法一:
			System.out.println("--字符串轉換成Date類型法一:--");
			Date dt = null;
			DateFormat dft=DateFormat.getDateInstance();
			dt = dft.parse("2015-3-3 10:10:10");
			System.out.println(dt);			   //輸出結果是:Tue Mar 03 00:00:00 CST 2015
			System.out.println(dft.format(dt));//輸出結果是:2015-3-3
			
			//法二:
			System.out.println("--字符串轉換成Date類型法二:--");
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd ");
			Date dat=sdf.parse("2015-3-3 ");
			System.out.print(sdf.format(dt)); //輸出結果是:2015-03-03 
			
		} catch (Exception e) {
			e.getStackTrace();
		}
		
		System.out.println();
		
		/**
		 * 計算某一年的某一月的天數
		 * 注:在使用set方法之前,必須先clear一下,否則信息會繼承系統當前時間
		 */
		Calendar calTime=Calendar.getInstance();
		calTime.clear();
		calTime.set(Calendar.YEAR,2015); //year 爲 int 
		calTime.set(Calendar.MONTH,2-1);//注意,Calendar對象默認一月爲0 
		int day=calTime.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數
		System.out.println("2015年2月的天數爲: " + day);
		System.out.println();
		
		/**
		 * 計算某一天是一年中的第幾個星期
		 * 日曆中月份默認從0開始計算,2即爲3月份
		 */
		Calendar calen=Calendar.getInstance();
		calen.set(Calendar.YEAR, 2015);
		calen.set(Calendar.MONTH, 2);
		calen.set(Calendar.DAY_OF_MONTH, 3);
		int weekno=calen.get(Calendar.WEEK_OF_YEAR);
		System.out.println("2015年3月3日是第幾周: " + weekno);
		System.out.println();
		
		/**
		 * 計算一年中第幾個星期是幾號
		 * 2015年第10周是幾號
		 */
		SimpleDateFormat dft=new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar=Calendar.getInstance();
		calendar.set(Calendar.YEAR, 2015);
		calendar.set(Calendar.WEEK_OF_YEAR, 10);
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		System.out.println("2015年第10周是幾號: " + dft.format(calendar.getTime()));
		System.out.println();
		
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Calendar calend=Calendar.getInstance();
		calend.set(Calendar.YEAR, 2006);
		calend.set(Calendar.MONTH, 8);
		calend.set(Calendar.DAY_OF_MONTH, 3);
		calend.add(Calendar.DATE, -4);
		
		Date date1=cal.getTime();
		System.out.println(sdf.format(date));
		calend.add(Calendar.DATE, 4);
		date1=calend.getTime();
		System.out.println(sdf.format(date));
		
		/**
		 * 計算日期時間差,參數為Calendar
		 */
		Date nowDate1 = new Date();
		Calendar calendarNow = Calendar.getInstance();
		calendarNow.setTime(nowDate1);
		
		Calendar calendarBefore = Calendar.getInstance();
		calendarBefore.clear();
		calendarBefore.set(Calendar.YEAR,2012); //year 爲 int 
		calendarBefore.set(Calendar.MONTH,6);//注意,Calendar對象默認一月爲0 
		calendarBefore.set(Calendar.DAY_OF_MONTH, 27);
		
		int count = 0;
		count = getIntervalDays(calendarBefore,calendarNow);
		System.out.println(count);
		
		int con = 0;
		con = getDaysBetween(calendarBefore,calendarNow);
		System.out.println("精確計算: " + con);
		
		/**
		 * 計算日期時間差,參數為Date
		 */
		System.out.println("--計算日期時間差,參數為Date--");
		try {
			Date nowDate2 = new Date();
			SimpleDateFormat sdfDFormat = new SimpleDateFormat("yyyy-MM-dd");
			Date dat0=sdfDFormat.parse("2012-7-29");
			sdfDFormat.format(dat0);
			System.out.println(dat0);
			int days = 0;
			days = getIntervalDay(dat0,nowDate2);
			System.out.println("days=" + days);
		} catch (Exception e) {
			// TODO: handle exception
			e.getStackTrace();
		}
		
		try {
			//String 和 Date ,Long 之間相互轉換 
			SimpleDateFormat sdft = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
			Date d = sdft.parse("3/4/2015 10:31:37 AM");
			long dvalue=d.getTime();
			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String mDateTime1=formatter.format(d);
			System.out.println(mDateTime1);
			
			//年月周求日期
			SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
		    Date date2= formatter2.parse("2015-03 1 星期五");
			SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
			String mydate2=formatter3.format(date2);
			System.out.println("年月周求日期:" + mydate2);
			
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章