1. 程式人生 > >時間日期相關:Date類、DateFormat類、Calendar類

時間日期相關:Date類、DateFormat類、Calendar類

1 Date類

Date 表示特定的瞬間,精確到毫秒。

1秒=1000毫秒

毫秒的0點:公元1970年 一月一日,午夜0:00:00 對應的毫秒值就是0

時間和日期的計算,必須依賴毫秒值。

 

System.currentTimeMillis()   返回以毫秒為單位的當前時間。返回值是long型別。

例:

public class Test {
	public static void main(String[] args) {
		long times=System.currentTimeMillis();
		System.out.println(times);
	}
}

 

1.1 Date構造方法

1.1.1 Date()

注意導util下的Date

 

例:

import java.util.Date;
public class Test {
	public static void main(String[] args) {
		//建立當前日期物件
		Date date1=new Date();
		System.out.println(date1);
		
		//建立指定毫秒值的日期物件
		Date longdate=new Date(20000000000000L);
		System.out.println(longdate);
	}
}

 

1.2常用方法

getTime(),把日期物件轉換成對應的時間毫秒值

例:

import java.util.Date;
public class Test {
	public static void main(String[] args) {		
		Date date1=new Date();		
		System.out.println(date1.getTime());	
		
		Date longdate=new Date(20000000000000L);
		System.out.println(longdate.getTime());
	}
}

 

1.3 DategetYeargetMouth等方法,但是已經過時,會有其他類的方法取代。

 

1.4 toString方法

上面列印date物件就是預設呼叫了toString方法


2 DateFormat類

DateFormat 是日期/時間格式化子類的抽象類,

通過這個類可以完成日期和文字之間的轉換。

也就是日期物件(new date())和字串的互相轉換。

 

2.1建立物件

DateFormat是抽象類,需要使用其子類SimpleDateFormat來建立物件。

引數是傳一個指定格式,

指定格式的具體規則:

在一個字串中,會將以下字母替換成對應時間組成部分,剩餘內容原樣輸出:

 

 

年月日時分秒:

yyyy-MM-dd HH:mm:ss  注意要寫yyyy(四個y),寫成yy就是兩位數的年份。

 

2.2常用方法

format方法,將Date物件轉換成String

parse方法,將String轉換成Date(轉換時,該String要符合指定格式,否則不能轉換) 

例:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Time02 {
	public static void main(String[] args) throws ParseException {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		//日期物件轉成字串
		Date date=new Date();
		String datestr=sdf.format(date);
		System.out.println(datestr);
		
		//字串轉成日期物件
		String str="1999-05-05 12:05:06";
		Date d=sdf.parse(str);
		System.out.println(d);		
	}
}

這裡注意要拋異常,因為有可能傳一個錯誤的格式,

 

3 Calendar類(不常用)

Calendar是日曆類,替換掉了許多Date的方法。

該類將所有可能用到的時間資訊封裝為靜態成員變數,方便獲取。

Calendar為抽象類,不能直接建立物件,而是通過靜態方法建立,將語言敏感內容處理好,再返回子類物件。

3.1 Calendar類靜態方法

 

3.2常用方法

例:

import java.util.Calendar;
import java.util.Date;

public class Demo1 {
	public static void main(String[] args) {
		//建立Calendar物件
		Calendar c=Calendar.getInstance(); //當前日期
		//System.out.println(c);
		
		//時間偏移
		System.out.println(c.get(Calendar.YEAR));			
		c.add(Calendar.YEAR, 1);
		System.out.println(c.get(Calendar.YEAR));
		c.add(Calendar.YEAR, -2);
		System.out.println(c.get(Calendar.YEAR));		
		c.add(Calendar.DATE, 2);
		System.out.println(c.get(Calendar.DATE));
		
		//日曆類轉為日期類
		Date d=c.getTime();
		System.out.println(d);
		
		//將日曆類設定成指定的時間
		Calendar c2=Calendar.getInstance();
		c2.set(Calendar.YEAR, 2008);
		c2.set(Calendar.MONTH,7); //這是8月
		c2.set(Calendar.DATE,8);
		c2.set(2055, 7, 8, 8, 8, 8);
		System.out.println(c2.getTime());
	}
}

 

注意:

1)用fammat轉換,必須先轉成日期類

2)西方星期的開始為週日,中國為週一。

3)在Calendar類中,月份的表示是以0-11代表1-12月。

所以月要加1,星期要減1

4)日期是有大小關係的,時間靠後,時間越大。

 

練習

1)求出自己已經出生多少天

import java.util.Calendar;
public class Days {
	public static void main(String[] args) {
		//當前系統時間毫秒
		long currenttime = System.currentTimeMillis();

		//設定出生日期
		Calendar c = Calendar.getInstance();
		c.set(1987, 1, 5);
		long birth = c.getTime().getTime();  //先轉成日期類,再轉成毫秒

		//計算時間差
		int day = (int) ((currenttime - birth) / 1000 / 60 / 60 / 24);
		System.out.println("已出生" + day + "天");
	}
}

 

2)求出今天距離204611日還有多少天

import java.util.Calendar;
public class Days2 {
	public static void main(String[] args) {
		// 當前系統時間毫秒
		long currenttime = System.currentTimeMillis();

		// 設定日期
		Calendar c = Calendar.getInstance();
		c.set(2046, 1, 1);
		long future = c.getTime().getTime(); // 先轉成日期類,再轉成毫秒

		// 計算時間差
		int day = (int) ((future-currenttime) / 1000 / 60 / 60 / 24);
		System.out.println("還有" + day + "天到2046年");
	}
}