日期時間類:Date類 日期時間格式化(DateFormat類) Calendar類


日期時間類

Date類

注:以下介紹的Date都在java.util包下,除此之外,java.sql包下也有此類,不要混淆

構造方法

  1. Date():分配Date對象並初始化此對象,以表示分配他的時間(精確到毫秒)

  2. Date(long date):分配Date對象並初始化此對象,以表示自標准基准時間(即1970年1月1日00:00:00GMT)起指定毫秒數Date后的時間

使用第二種構造方法要先創建一個Date對象

//在此之前要導入Date類
import java.util.Date;

long t=System.currentTimeMillis();
Date date = new Date(t);

注:使用Date對象用的是long

Date類的常用方法和說明

方法 說明
after(Date when) 測試當前日期是否在指定日期之后
before(Date when) 測試當前日期是否在指定日期之前
getTime() 獲得自1970年1月1日00:00:00GMT起到現在所經過的毫秒數
setTime(long time) 設置當前Date對象所表示的日期時間值,該值用以表示1970年1月1日00:00:00GMT以后time毫秒的時間點

獲取當前日期和時間

import java.util.Date;

public static void main(String[] args) {
        Date date = new Date();
        long value= date.getTime();//獲得毫秒數
        System.out.println("日期:"+date);
        System.out.println("到現在所經歷的毫秒數是:"+value);
    }
    /*
    日期:Sat Sep 04 18:44:19 CST 2021
    到現在所經歷的毫秒數是:1630752259575
     */

日期時間格式化(DateFormat類)

格式化風格有以下4種

(以2021年9月2日舉例)

SHORT:完全為數字

MEDIUM:較長

LONG:更長

FULL:完全指定

要格式化日期,首先要創建DateFormat對象,因為他是抽象類,所以可以用getDateInstance()進行創建

DateFormat d=DateFormat.getDateInstance();

此類常用方法和說明

方法 說明
format() 將一個Date對象實例格式化為日期/時間字符串
getCalendar() 獲取於此日期/時間格式器關聯的日歷
getDateInstance() 獲取日期格式器,該格式器具有默認語言環境的默認格式化風格
getDateTimeInstance() 獲取日期/時間格式器,該格式器具有默認語言環境的默認格式化風格
getInstance() 獲取為日期和時間使用SHORT風格的默認日期/時間格式器
getTimeInstance() 獲取時間格式器,該格式器具有默認語言環境的默認格式化風格
parse(String source) 將字符串解析成一個日期,並返回這個日期的Date對象

實例如下

import java.text.DateFormat;
import java.util.Date;

public static void main(String[] args) {
        //將當前日期按照默認模式輸出
        DateFormat d1=DateFormat.getInstance();
        System.out.println(d1.format(new Date()));
        //21-9-6 下午4:40

        //輸出長類型格式的當前時間
        DateFormat d2=DateFormat.getTimeInstance(DateFormat.LONG);
        System.out.println(d2.format(new Date()));
        //下午04時40分48秒

        //輸出長類型格式的當前日期
        DateFormat d3=DateFormat.getDateInstance(DateFormat.LONG);
        System.out.println(d3.format(new Date()));
        //2021年9月6日

        //輸出長類型格式的當前時間和日期
        DateFormat d4=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
        System.out.println(d4.format(new Date()));
        //2021年9月6日 下午04時40分48秒
    }

因為DateFormat是一個抽象類,所以,除了使用getXXXInstance()方法創建對象,還可以用其子類,例如SimpleDateFormat類,此類提供了19個格式化字符,可以讓開發者隨意編寫日期格式


SimpleDateFormat類提供的格式化字符

字母 日期或時間元素 類型 示例
G Era標識志符 Text AD
y Year 2021;21
M 年中的月份 Month July;Jul;07
w 年中的周數 Number 22
W 月份中的周數 Number 3
D 年中的天數 Number 56
d 月份中的天數 Number 15
F 月份中的星期 Number 3
E 星期中的天數 Text Monday;Mon
a Am/pm標記 Text PM
H 一天中的小時數(0~23) Number 11
h am/pm中的小時數(1~12) Number 2
k 一天中的小時數(1~24) Number 22
K am/pm中的小時數(0~11) Number 10
m 小時中的分鍾數 Number 35
s 分鍾中的秒數 Number 50
S 毫秒數 Number 555
z 時區 General time zone Pacific Standard Time;PST;GMT-08:00
Z 時區 RFC 822 time zone -800

一般表中字母的數量會影響數字的格式,例如yyyy表示4位年份:2021,yy表示2位年份:21,y表示4位年份,如果超過4個y,則在左側補0,yyyyyy表示002021

常用時間格式

日期時間 對應的格式
2021/9/6 yyyy/MM/dd
2021.9.6 yyyy.MM.dd
2021-09-06 17:42:50 yyyy-MM-dd HH.mm.ss
2021年9月6日 17時46分50秒 yyyy年MM月dd日 HH時mm分ss秒
下午5時 ah時
今年已經過去了200天 今年已經過去了D天

示例如下

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

public static void main(String[] args) {
        DateFormat d = new SimpleDateFormat("yyyy年MM月dd日 EEEE HH時mm分ss秒");
        System.out.println("現在是:");
        System.out.println(d.format(new Date()));
        //2021年09月06日 星期一 17時51分17秒
    }

Calendar類

Date在設計時並沒有考慮國際化,所以之中的方法並不能滿足當下需求,所以就有了Calendar類的出現,也是一個抽象類,該類提供了一些字段和方法,這些字段和方法被定義為protected。

該類提供了一個getIntance()方法,以獲得此類型的一個通用對象。Calendar類的getIntance()方法返回一個Calendar類對象,其日歷字段已由當前日期和時間初始化

import java.util.Calendar;

Calendar a=Calendar.getInstance();

此類提供的常用字段及其說明

字段名 說明
DATE 指示一個月中的某天
DAY_OF_MONTH 指示一個月中的某天
DAY_OF_WEEK 指示一個星期的某天
DAY_OF_WEEK_IN_MONTH 指示當前月中的第幾個星期
DAY_OF_YEAR 指示當前年中的天數
HOUR 指示上午或下午的小時
HOUR_OF_DAY 指示一天中的小時
MILLISECOND 指示一秒中的毫秒
MINUTE 指示一小時的分鍾
MONTH 指示月份
SECOND 指示一分鍾的秒
time 日歷的當前設置時間,以毫秒為單位,表示自格林威治標准時間1970年1月1日0:00:00后經過的時間
WEEK_OF_MONTH 指示當前月中的星期數
WEEK_OF_YEAR 指示當前年中的星期數
YEAR 指示年

此類提供的常用方法和說明

方法 說明
add() 根據日歷規則,為給定的日歷字段添加或減去指定的時間量
after() 判斷此Calendar對象表示的時間是否在指定Object表示的時間之后,返回判斷結果
before() 判斷此Calendar對象表示的時間是否在指定Object表示的時間之前,返回判斷結果
get() 返回給定日歷字段的值
getInstance() 使用默認時區和語言環境獲得一個日歷
getTime() 返回一個表示此判斷此Calendar對象時間值(從歷元至現在的時間偏移量)的Date對象
getTimeInMillis() 返回此判斷此Calendar對象的時間值,以毫秒為單位
roll() 在給定的日歷時間段上添加或減去(上/下)單個時間單位,不更改更大的字段
set(int field,int value) 將給定的日歷字段設置為給定值
set(int year,int month,int date) 設置日歷字段YEAR,MONTH和DAY_OF_MONTH的值
set(int year,int month,int date,int hourOfDay,int minute) 設置日歷字段YEAR,MONTH,DAY_OF_MONTH,HOUR_OF_DAY和MINUTE的值
set(int year,int month,int date,int hourOfDay,int minute,int second) 設置日歷字段YEAR,MONTH,DAY_OF_MONTH,HOUR,MINUTE和SECOND的值
setTime() 使用給定的Date對象設置此Calendar對象的值
setTimeInMillis() 用給定的long值設置此Calendar對象的當前時間值

今天離中華人民共和國成立100周年差多少天

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

public static void main(String[] args) {
        System.out.println("----------中華人民共和國100周年倒計時----------");
        Date date = new Date();
        //創建SDF對象,設置日期格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        //調用format方法,格式化時間並轉換為目標格式
        String today=simpleDateFormat.format(date);
        System.out.println("今天是"+today);//輸出當前日期
        //獲取從1970年1月1日至當前所經歷的毫秒數
        long time1= date.getTime();
        //使用默認時區和語言環境獲得一個日歷
        Calendar calendar=Calendar.getInstance();
        //設置日歷中的年月日的值,因為月份是從0開始的,所以要減1
        calendar.set(2049,10-1,1);
        //計算自1970年1月1日到2049年10月1日所經過的毫秒數
        long time2= calendar.getTimeInMillis();
        //計算當前時間到2049年10月1日相差的時間
        long day=(time2-time1)/(1000*60*60*24);
        System.out.println("距離2049年10月1日還有"+day+"天");
    }

注:

  1. c.(Calendar.DAY_OF_MONTH,0)獲取的是上個月的最后一天,所以調用前需要將月份往后加一個月
  2. Calendar.MONTH的第一個月是從0開始記錄的,所以在獲得月份數字后要加1。年和日是從1記錄的,不用加1
  3. Calendar.DAY-OF_WEEK的第一天是周日,第二天是周一,最后一天是周六

關於setTime

import java.util.Date;

Date date = new Date();
date.setTime(10000);//10000毫秒等於10秒
System.out.println(date);
//輸出Thu Jan 01 08:00:10 CST 1970

setTime(t)指的是經過從1970年1月1日8點開始經過t毫秒后的時間


免責聲明!

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



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