天天看點

對時間的各種操作

 java.util.Calendar 月曆類

 Calendar是一個抽象類,規定了操作日期的相關方法。

 由于不同的日期曆法對日期的計算不同,需要靠不同的子類去實作這些方法。

 常用的實作類:java.util.GregorianCalendar,即 陽曆

 Calendar提供了一個靜态方法:getInstance()可以擷取一個目前系統所在地區适用的實作類,大部分擷取的都是陽曆實作類。 

Calendar calendar = Calendar.getInstance();
/*
 * toString可讀性差
 */
System.out.println(calendar);
           

Calendar提供了一個可以轉換為Date的方法:

Date getTime()   //将目前Calendar表示的時間以Date形式傳回。

Date date = calendar.getTime();
System.out.println(date);
           

也提供了一個可以讓Calendar表示指定日期的方法:

void setTime(Date date)

是目前Calendar表示給定的Date所表示的日期

 Calendar的get方法

 int get(int field)    //該方法可以擷取指定的時間分量所對應的值。

 時間分量是一個int值,不同值表示不同時間分量,無需記憶這些數具體是多少,Calendar提供了對應的常量。

Calendar calendar = Calendar.getInstance();

//擷取年
int year = calendar.get(Calendar.YEAR);

//擷取月  月從0開始
int month = calendar.get(Calendar.MONTH)+1;

/*
 * 擷取日
 * 和"天"相關的常量有:
 * DAY_OF_MONTH:月中的天,就是俗稱的"幾号"
 * DAY_OF_WEEK:周中的天,就是指星期幾
 * DAY_OF_YEAR:年中的天。
 * DATE:與DAY_OF_MONTH意義相同。
 */
int date = calendar.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+date);

int h = calendar.get(Calendar.HOUR_OF_DAY);
int m = calendar.get(Calendar.MINUTE);
int s = calendar.get(Calendar.SECOND);
System.out.println(h+":"+m+":"+s);
/*
 * 根據目前Calendar表示的日期擷取指定時間分量
 * 所允許的最大值
 * 今年總共多少天?
 */
int days = calendar.getActualMaximum(
	Calendar.DAY_OF_YEAR
);
System.out.println("今年共:"+days+"天");

           

Calendar的add方法

 void add(int field,int amount)

 對給定的時間分量加上指定的值,若給定的值為負數則是減去。

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
/*
 * 檢視3年2個月零25天以後所在周的周三是哪天?
 */
//加3年
calendar.add(Calendar.YEAR, 3);
//加2個月
calendar.add(Calendar.MONTH, 2);
//加25天
calendar.add(Calendar.DAY_OF_YEAR, 25);
System.out.println(calendar.getTime());

calendar.set(Calendar.DAY_OF_WEEK, 4);
System.out.println(calendar.getTime());
           

Calendar的set方法 

可以對指定時間分量設定對應的值:

void set(int field,int value)

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());

/*
 * 設定Calendar為2008-08-08 20:08:08
 */
//設定年
calendar.set(Calendar.YEAR, 2008);
//設定月
calendar.set(Calendar.MONTH, Calendar.AUGUST);
//設定日
calendar.set(Calendar.DAY_OF_MONTH,8);

calendar.set(Calendar.HOUR_OF_DAY,20);
calendar.set(Calendar.MINUTE,8);
calendar.set(Calendar.SECOND,8);
System.out.println(calendar.getTime());

/*
 * 設定為周4
 * 按照西方的标準,一周的第一天為周日
 */
calendar.set(Calendar.DAY_OF_WEEK, 5);
System.out.println(calendar.getTime());
           

java.util.Date

Date的每一個執行個體用于表示一個确切的時間。内部維護的一個long值,該值為1970年1月1日 00:00:00到目前

Date所表示的時間之間所經過的毫秒。

 由于Date設計時存在時區問題,是以大部分操作時間的方法都被聲明為過時的,不再建議使用。

//預設執行個體化表示目前系統時間
Date date = new Date();
System.out.println(date);
//擷取Date内部維護的long值
long time = date.getTime();
		
time += 1000*60*60*24;
//可以設定一個long指使Date表示該日期
date.setTime(time);
		
System.out.println(date);
           

 SimpleDateFormat的format 将給定的Date按照目前SDF指定的日期格式轉換為對應内容的字元串

Date date = new Date();
System.out.println(date);		

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String format(Date date)将給定的Date按照目前SDF指定的日期格式轉換為對應内容的字元串
String str = sdf.format(date);
System.out.println(str);
           

 SimpleDateFormat的parse将一個字元串按照對應的日期格式解析為Date  需要抛異常

public static void main(String[] args) throws ParseException {
	String str = "2008-08-08 20:08:08";
		
	SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	Date date = sdf.parse(str);
		
	System.out.println(date);
}
           

輸入自己的生日,然後經過程式計算,輸出到今天為止一共活了多少天

例如:

1992-08-02

計算後輸出到今天為止共活了xxxx天

再輸出出生10000天的紀念日為哪天?

格式還是:yyyy-MM-dd

Scanner scanner = new Scanner(System.in);
System.out.println("請輸入您的生日:");
String birthStr = scanner.nextLine();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birth = sdf.parse(birthStr);
Date now = new Date();

long time = now.getTime()-birth.getTime();
//換算成天
time = time/1000/60/60/24;
System.out.println("恭喜您!一共活了"+time+"天,請繼續保持!");

//計算10000天紀念日
time = birth.getTime()+1000L*60*60*24*10000;
Date date = new Date(time);

String str = sdf.format(date);
System.out.println("您出生10000天的紀念日為:"+str);
           

計算商品促銷日期

促銷日計算規則:該商品過期日前兩周的周三

程式啟動後,要求使用者輸入商品的生産日期,格式為:yyyy-MM-dd

然後再輸入保存期限的天數

然後經過計算,輸出該商品促銷日期,輸出的格式是:yyyy-MM-dd

Scanner scanner = new Scanner(System.in);
System.out.println("請輸入生産日期:");
String dateStr = scanner.nextLine();	
System.out.println("請輸入保存期限天數:");
int days = Integer.parseInt(scanner.nextLine());	
//得到生産日期的Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateStr);
Calendar calendar = Calendar.getInstance();
//讓Calendar表示生産日期
calendar.setTime(date);	
//計算過期日
calendar.add(Calendar.DAY_OF_YEAR, days);
//減去2周
calendar.add(Calendar.DAY_OF_YEAR, -14);
//設定為當周的周三
calendar.set(Calendar.DAY_OF_WEEK, 4);

date = calendar.getTime();
String str = sdf.format(date);
System.out.println("促銷日為:"+str);
           

 兩個字元創類型的時間進行比較

//目前時間與過期時間進行比較
	public static boolean warnning(String day,String period) throws ParseException{
		int month = Integer.parseInt(period);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(day);
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		//加上周期(月),為到期日
		calendar.add(Calendar.MONTH, month);
		//設定為過期日的前15天
		calendar.add(Calendar.DAY_OF_YEAR, -15);
		//擷取提醒的時間
		date = calendar.getTime();
		//提醒時間字元串
		String time = sdf.format(date);
		Date d = new Date();
		//目前時間字元串
		String now = sdf.format(d.getTime());
		//比較時間
		int result = time.compareTo(now);
		if(result>=0){
			//到了提醒時間
			return true;
		}else{
			//沒到提醒時間
			return false;
		}
		
		
	}
           

繼續閱讀