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
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值