1. 程式人生 > 實用技巧 >Date類(日期類)、DateFormat類(對日期類轉換為文字)、Calendar類(日曆類)--常用類

Date類(日期類)、DateFormat類(對日期類轉換為文字)、Calendar類(日曆類)--常用類

Date類(日期類)、DateFormat類(對日期類轉換為文字)、Calendar類(日曆類)--常用類

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

1000毫秒 = 1秒

日期和毫秒可以相互轉換

日期-->毫秒:從1970年1月1日00:00:00到當前日期,一共經歷了多少毫秒

毫秒-->日期:1天 = 24 x 60 x 60 = 86400秒 = 86400 x 1000 = 86400000毫秒

構造方法:
public Date()//生成當前系統到1970年1月1日00:00:00之間的毫秒數----生成當前系統的時間
public Date(long date)//生成從1970年1月1日00:00:00,過了date引數毫秒的時間物件---生成特定時間,注意date型別為long    

常用成員方法:
public long getTime()//返回自1970年1月1日00:00:00的毫秒數
DateFormat類---對日期進行格式化

java.text public abstract class DateFormat extends Format 是日期/時間格式的子類的抽象父類

作用:格式化(即,日期→文字),解析(文字→日期)

成員方法:
public final String format(Date date)//將日期轉化為字串
public Date parse(String source)//將字串解析為日期

DateFormat類為一個抽象類,無法建立物件使用,需用到它的實現子類SimpleDateFormat

SimpleDateFormat類extends DateFormat

java.text.SimpleDateFormat extends DateFormat

構造方法:

public SimpleDateFormat(String pattern)
    /*使用給定的模式和預設的預設日期格式來建立SimpleDateFormat 物件
      引數:pattern  傳遞指定的日期格式
      格式:區分大小寫
      y   年
      M   月
      d   日
      H   時
      m   分
      s  秒
      對應的格式,會把格式替換成對應的日期和時間
      "yyyy-MM--dd HH:mm:ss"
      注意:模式中的字母不可更改,但連線符可更改
      "yyyy年MM月dd日 HH時mm分ss秒" 也行
    */

用父類DateFormat 中方法來講文字和日期之間相互轉化

public final String format(Date date)//將日期轉化為字串
public Date parse(String source)//將字串解析為日期
package commonclass;

import java.text.FieldPosition;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestSimpleDateFormat01 {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH時mm分ss秒");
        String format = simpleDateFormat.format(new Date());
        System.out.println(format);

        Date parse = simpleDateFormat.parse("2020年08月08日17時01分53秒");//這兒的source格式必須與“yyyy年MM月dd日HH時mm分ss秒”格式相對應,否則會丟擲ParseException
        System.out.println(parse);

    }
}

練習:

package commonclass;

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

//計算一個人出生了多少天
/*思路
* 1.計算當前時間的毫秒數
* 2.計算出生時間的毫秒數
* 3.兩者相減,再/1000/60/60/24*/
public class PracticeSimpleDateFormat01 {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();//1.當前時間毫秒數
        System.out.println(date.getTime());

        //2.計算出生時間的毫秒數
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH時mm分ss秒");
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入出生年月日,yyyy年MM月dd日HH時mm分ss秒");
        String strDate = scanner.next();

        Date birth = simpleDateFormat.parse(strDate);
        System.out.println(birth.getTime());

        int days = (int) ((date.getTime() - birth.getTime())/1000/60/60/24);
        System.out.println("你從出生到現在共活了"+days+"天");

    }
}
Calendar類---日曆類

java.until.Calendar類是一個抽象類,裡面提供了許多操作日曆欄位的方法(如YEAR , MONTH , DAY_OF_MONTH , HOUR )

由於calendar類是一個抽象類,無法直接建立物件

但calendar類裡面有一個靜態方法,public static Calendar getInstance(),可以直接建立calendar類的子類物件。

Calendar類中常用的成員方法
public int get(int field)//返回給定的日曆欄位的值
public void set(int field, int value)//設定特定的日曆欄位值
public final void set(int year, int month, int date)//設定日曆的年、月、日
abstract public void add(int field, int amount)//加上或減去指定的時間到指定日曆欄位,amount可以是正負
public final Date getTime()//將日曆物件轉換為日期物件
 /*引數:field
 是Calendar類中的靜態成員變數
 比如 public final static int YEAR = 1;
     public final static int MONTH = 2;
     public final static int DATE = 5;
     等等等,有好多,可以在Calendar類中查詢
 */
 
package commonclass;

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

public class TestCalendar01 {
    public static void main(String[] args) {
        //生成calendar物件
        Calendar c = Calendar.getInstance();

        //設定calendar欄位
        c.set(Calendar.YEAR,2000);

        //增加或減少calendar指定欄位的值
        c.add(Calendar.MONTH,-1);//西方月份0-11月,東方月份1-12月

        System.out.println(c);//java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2000,MONTH=6,WEEK_OF_YEAR=33,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=221,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=9,HOUR_OF_DAY=21,MINUTE=22,SECOND=45,MILLISECOND=446,ZONE_OFFSET=28800000,DST_OFFSET=0]


        //將日曆物件轉化為日期物件
        Date date = c.getTime();
        System.out.println(date);//Sat Jul 08 21:22:45 CST 2000
    }
}