Java基礎教程——Date類和Calendar類


Date類和Calendar類都是關於日期的類,都在java.util包中,使用時需要import。

Date

java.util.Date類的對象用來表示時間和日期,用得最多的是獲取系統當前日期和時間,精確到毫秒。

Java中有兩個Date類,還有一個是java.sql.Date,這個類一般不用,即使在數據庫中也不推薦使用。
寫代碼時注意導入的包一定是java.util包。

import java.util.Date;
public class TestDate {
	public static void main(String[] args) {
		Date date = new Date(); // 獲得當前的系統日期和時間
		System.out.println("今天的日期是:" + date);
		Date dateL = new Date(0L);// 帶參版:參數是毫秒值
		System.out.println("Date(long date)的日期是:" + dateL);
		long time = date.getTime(); // 獲得毫秒數
		System.out.println("自1970年1月1日起以毫秒為單位的時間(GMT):" + time);
		// Deprecated,不贊成使用。建議使用Calendar代替。
		Date dateYMD = new Date(1999, 01, 02);
		Date dateYMDHMS = new Date(1999, 01, 02, 10, 10, 10);
	}
}

日期格式化
simpleDateFormat.format(_date):把Date類型轉為格式化的字符串
simpleDateFormat.parse("1949-10-01"):把格式化的字符串轉為Date類型

import java.text.DateFormat;// 抽象類
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
// DateFormat:日期↔文本
public class TestDate格式化 {
	public static void main(String[] args) {
		Date _date = new Date(); // 獲得當前的系統日期和時間
		// 創建DateFormat對象
		DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		// format(Date date):按照指定模式,把日期轉為字符串
		String _s = _dateFormat.format(_date);
		System.out.println("SimpleDateFormat:" + _s);
		// -------------------------------
		// parse方法:按照指定格式解析
		try {
			Date parse = _dateFormat.parse("1949-10-01");
			System.out.println(parse);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
} 

Date類里很多方法被宣布“過時了”,過時了不是不能用,只是不贊成使用。
比如上面第一段代碼中的Date的帶年月日的構造方法。

    @Deprecated
    public Date(int year, int month, int date) {
        this(year, month, date, 0, 0, 0);
    }

如果要通過年月日構造一個日期類型的對象,推薦使用Calendar類。


Calendar

java.util.Calendar類(日歷)是抽象類,無法實例化。

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {
	……
}

要得到對象,只能通過調用getInstance方法來獲得\

Calendar cal = Calendar.getInstance();

一般得到的是GregorianCalendar的實例對象,可以通過toString()輸出結果看到。

方法 解釋
Calendar getInstance() 獲取Calendar對象
Date getTime() Calendar對象轉為Date對象
int get(int fields) 獲取fields指定部分的值
void set(int fields, int value) 將value中指定的值設置到fields指定的部分
void add(int fields, int amount) 將amount值添加到fields指定的時間或日期部分
Object clone() 返回調用對象的副本
void clear() 清除當前對象中所有的時間組成部分
boolean after(Object obj) 如果調用對象時間在obj之后,返回true
boolean before(Object obj) 如果調用對象時間在obj之前,返回true
boolean equals(Object obj) 判斷調用對象與obj是否相等
import java.util.Calendar;
public class TestCalendar {
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		// int _year = 2019, _month = 1, _day = 1;
		// cal.set(_year, _month - 1, _day);
		System.out.println(cal.get(Calendar.YEAR) + ":年");
		System.out.println(cal.get(Calendar.MONTH) + ":月,從0開始算");
		System.out.println(cal.get(Calendar.DATE) + ":當天 1-31");
		System.out.println(cal.get(Calendar.DAY_OF_MONTH) + ":當天 1-31");
		System.out.println(cal.get(Calendar.DAY_OF_WEEK) + ":星期,周日算第1天");
		System.out.println(cal.get(Calendar.WEEK_OF_MONTH) + ":月的第n周");
		System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + ":年的第n周");
		System.out.println(cal.get(Calendar.DAY_OF_YEAR) + ":一年里的第n天");
		System.out.println(cal.get(Calendar.HOUR) + ":12小時制");
		System.out.println(cal.get(Calendar.HOUR_OF_DAY) + ":24小時制");
		System.out.println(cal.get(Calendar.MINUTE) + ":分");
		System.out.println(cal.get(Calendar.SECOND) + ":秒");
		System.out.println(cal.get(Calendar.MILLISECOND) + ":毫秒");
		// 閏年2月29的一年之后
		cal.set(2000, 2 - 1, 29);
        // 把日歷轉為日期
		System.out.println(cal.getTime());
		cal.add(Calendar.YEAR, 1);
		System.out.println(cal.getTime());
	}
}

*java8新增的time包

java.time,用於日期、時間處理
|--Clock類:獲取指定時區的日期時間
|--Duration類:一段持續的時間
|--Instant類:具體時刻,精確到納秒
|--LocalDate類:不帶時區的時間
……

import java.time.*;
public class TestDateJava8 {
	public static void main(String[] args) {
		testClock();
		testDuration();
		testInstant();
		testLocalDate();
	}
	static void testClock() {
		System.out.println("---Clock類:獲取指定時區的日期時間---");
		Clock clock = Clock.systemUTC();// 世界統一時間
		System.out.println("當前時刻為:" + clock.instant());
		// millis()獲取clock對應的毫秒數,與System.currentTimeMillis()輸出相同
		System.out.println(clock.millis() + ":clock.millis()");
		System.out.println(System.currentTimeMillis() + ":System.currentTimeMillis()");
	}
	static void testDuration() {
		System.out.println("---Duration類:一段持續的時間---");
		int s = 60 * 59;// 60秒*59=59分鍾
		Duration d = Duration.ofSeconds(s);
		System.out.println(s + "秒相當於" + d.toMinutes() + "分");
		System.out.println(s + "秒相當於" + d.toHours() + "小時");
		System.out.println(s + "秒相當於" + d.toDays() + "天");
	}
	static void testInstant() {
		System.out.println("---Instant類:具體時刻,精確到納秒---");
		Instant instant = Instant.now();// 獲取當前時間
		System.out.println(instant + ":Instant.now() ");
		Instant instant2 = instant.plusSeconds(6000);
		System.out.println(instant2 + ":加時間plusSeconds()");
	}
	static void testLocalDate() {
		System.out.println("---LocalDate類:不帶時區的時間---");
		LocalDate localDate = LocalDate.now();
		System.out.println(localDate + ":LocalDate.now()");
		// 獲得某年的第幾天
		int _某一年 = 2017, _第幾天 = 100;
		localDate = LocalDate.ofYearDay(_某一年, _第幾天);
		System.out.println(localDate + ":" + _某一年 + "年,第" + _第幾天 + "天LocalDate.ofYearDay()");
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM