1. 日期類
1.1 第一代日期類
1) Date: 精確到毫秒,代表特定的瞬間
2) SimpleDateFormat: 格式和解析日期的類
????????SimpleDateFormat 格式化和解析日期的具體類。它允許進行格式化(日期-→>文本)、解析(文本->日期)和規范化.
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/***@author
*@version1.0*/public class Date01{public static void main(String[ ] args ) throws ParseException{
//解讀
//1. 獲取當前系統時間
//2. 這里的Date 類是在java.util 包
//3. 默認輸出的日期格式是國外的方式, 因此通常需要對格式進行轉換Date d1 = new Date(); //獲取當前系統時間System.out.println("當前日期=" + d1);Date d2 = new Date(9234567); //通過指定毫秒數得到時間System.out.println("d2=" + d2); //獲取某個時間對應的毫秒數//解讀
//1. 創建 SimpleDateFormat 對象,可以指定相應的格式
//2. 這里的格式使用的字母是規定好,不能亂寫SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");String format = sdf.format(d1); // format:將日期轉換成指定格式的字符串System.out.println("當前日期=" + format);//解讀
//1. 可以把一個格式化的String 轉成對應的 Date//2. 得到Date 仍然在輸出時,還是按照國外的形式,如果希望指定格式輸出,需要轉換
//3. 在把String-> Date , 使用的 sdf 格式需要和你給的String的格式一樣,否則會拋出轉換異常String s = "1996 年 01 月 01 日 10:20:30 星期一";Date parse = sdf.parse(s);System.out.println("parse=" + sdf.format(parse));
}}
1.2 第二代日期類
1) 第二代日期類,主要就是Calendar類(日歷)。
????????public abstract class Calendar extends object implements Serializable,Cloneable, ????????Comparable<calendar>
2) Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH.DAY_OF_MONTH、HOUR等 日歷室段 之間的轉換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。
import java.util.Calendar;/***@author
*@version1.0*/public class Calendar_{public static void main(String[]args){//解讀
//1.Calendar是一個抽象類,并且構造器是private//2.可以通過getInstance()來獲取實例
//3.提供大量的方法和字段提供給程序員
//4.Calendar沒有提供對應的格式化的類,因此需要程序員自己組合來輸出(靈活)//5.如果我們需要按照24小時進制來獲取時間,Calendar.HOUR==改成=>Calendar.HOUR_OF_DAYCalendarc=Calendar.getInstance();//創建日歷類對象//比較簡單,自由System.out.println("c="+c);//2.獲取日歷對象的某個日歷字段System.out.println("年:"+c.get(Calendar.YEAR));//這里為什么要+1,因為Calendar返回月時候,是按照0開始編號System.out.println("月:"+(c.get(Calendar.MONTH)+1));System.out.println("日:"+c.get(Calendar.DAY_OF_MONTH));System.out.println("小時:"+c.get(Calendar.HOUR));System.out.println("分鐘:"+c.get(Calendar.MINUTE));System.out.println("秒:"+c.get(Calendar.SECOND));
//Calender沒有專門的格式化方法,所以需要程序員自己來組合顯示System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +
c.get(Calendar.DAY_OF_MONTH)+""+c.get(Calendar.HOUR_OF_DAY)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND));} }
1.3 第三代日期類
前面兩代日期類的不足分析
????????JDK 1.0中包含了一個java.util.Date類,但是它的大多數方法已經在JDK 1.1引入Calendar類之后被棄用了。而Calendar也存在問題是:
1) 可變性:像日期和時間這樣的類應該是不可變的。
2) 偏移性:Date中的年份是從1900開始的,而月份都從0開始。
3) 格式化:格式化只對Date有用,Calendar則不行。
4) 此外,它們也不是線程安全的; 不能處理閏秒等(每隔2天,多出1s).
? ? ? ?1.? LocalDate(日期/年月日)、LocalTime(時間/時分秒)、LocalDateTime(日期時間/年月日時分秒)JDK8加入
????????LocalDate 只包含日期,可以獲取日期字段
????????LocalTime 只包含時間,可以獲取時間字段
????????LocalDateTime 包含日期+時間,可以獲取日期和時間字段
????????LocalDateTime ldt = LocalDateTime.now();//LocalDate.now(;//LocalTime.now()System.out.println(ldt);
????????ldt.getYear();ldt.getMonthValue();ldt.getMonth();ldt.getDayofMonth( );
????????ldt.qetHour(): ldt.qetMinute():ldt.qetSecond():
import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.format.DateTimeFormatter;import java.util.ArrayList;import java.util.Collection;/**
* @author
* @version 1.0*/public class LocalDate_ {public static void main(String[] args) {//第三代日期
//解讀
//1. 使用now() 返回表示當前日期時間的 對象LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()System.out.println(ldt);//2. 使用DateTimeFormatter 對象來進行格式化
// 創建 DateTimeFormatter 對象DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String format = dateTimeFormatter.format(ldt);System.out.println("格式化的日期=" + format);System.out.println("年=" + ldt.getYear());System.out.println("月=" + ldt.getMonth());System.out.println("月=" + ldt.getMonthValue());System.out.println("日=" + ldt.getDayOfMonth());System.out.println("時=" + ldt.getHour());System.out.println("分=" + ldt.getMinute());System.out.println("秒=" + ldt.getSecond());LocalDate now = LocalDate.now(); //可以獲取年月日LocalTime now2 = LocalTime.now();//獲取到時分秒
//提供 plus 和 minus方法可以對當前時間進行加或者減
//看看890 天后,是什么時候 把 年月日-時分秒LocalDateTime localDateTime = ldt.plusDays(890);System.out.println("890 天后=" + dateTimeFormatter.format(localDateTime));//看看在 3456分鐘前是什么時候,把 年月日-時分秒輸出LocalDateTime localDateTime2 = ldt.minusMinutes(3456);System.out.println("3456 分鐘前 日期=" + dateTimeFormatter.format(localDateTime2));} }
1.4 DateTimeFormatter 格式日期類
類似于 SimpleDateFormat
DateTimeFormat dtf =DateTimeFormatter.ofPattern(格式);
String str = dtf.format(日期對象);
案例:
LocalDateTime ldt = LocalDateTime.now0;
//關于DateTimeFormatter的各個格式參數,需要看jdk8的文檔.
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日HH小時mm分鐘ss秒");
String strDate = dtf.format(ldt);
1.5 Instant 時間戳
類似于Date
提供了一系列和Date類轉換的方式
????????lnstant—>Date:
????????Date date = Date.from(instant);
????????Date—>lnstant:
????????lnstant instant = date.tolnstant);
案例:
Instant now = Instant.now();
System.out.println(now);
Date date =Date.from(now);
???????lnstant instant = date.tolnstant();
import java.time.Instant;import java.util.Date;/***@author
*@version1.0*/public class Instant_{public static void main(String[]args){//1.通過靜態方法now()獲取表示當前時間戳的對象Instant now = Instant.now();System.out.println(now);//2.通過from可以把Instant轉成DateDatedate=Date.from(now);
//3. 通過 date 的toInstant() 可以把 date 轉成Instant 對象Instant instant = date.toInstant();} }
1.6 第三代日期類更多方法
LocalDateTime類
MonthDay類: 檢查重復事件是
否是閏年
增加日期的某個部分
使用plus方法測試增加時間的某個部分
使用minus方法測試查看一年前和一年后的日期
其他的方法,就不說,使用的時候,自己查看API使用即可