最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文搞懂Java中的日期類

 更新時(shí)間:2022年09月23日 09:56:58   作者:別團(tuán)等shy哥發(fā)育  
在程序的開發(fā)中我們經(jīng)常會遇到日期類型的操作,Java對日期類型的操作提供了很好的支持。本文將通過示例來聊聊Java中日期類的使用,需要的可以參考一下

一、日期類

在程序的開發(fā)中我們經(jīng)常會遇到日期類型的操作,Java對日期類型的操作提供了很好的支持。在最初的版本下,java.lang包中的System.currentTimeMillis();可以獲取當(dāng)前時(shí)間與協(xié)調(diào)時(shí)間(UTC)1970年1月1日午夜之間的時(shí)間差(以毫秒為單位測量)。我們往往通過調(diào)用該方法計(jì)算某段代碼的耗時(shí)。

public class TestTime {
    public static void main(String[] args) {
        long start=System.currentTimeMillis();
        long sum=0;
        for (int i = 0; i < 1000000; i++) {
            sum+=i;
        }
        System.out.println("sum="+sum);
        long end=System.currentTimeMillis();
        System.out.println("耗時(shí):"+(end-start)+"ms");
    }
}

1.1 第一代日期類

第一代日期時(shí)間API主要有java.util.Date和日期時(shí)間格式化有關(guān)的java.text.DateFormat及其子類。

1.1.1 Date類

JDK1.0就在java.util包下面提供了Date類用于表示特定的瞬間,可以精確到毫秒。

通過API或源碼,可以看出Date類的大部分方法已經(jīng)過時(shí),已被第二代日期類Calendar代替,剩下的Date類常見方法如下所示。

序號方法定義描述
1Date()返回一個(gè)代表當(dāng)前系統(tǒng)時(shí)間的Date對象,精確到毫秒
2Date(long date)返回一個(gè)距離UTC時(shí)間date毫秒的新日期對象,精確到毫秒
3int compareTo(Date anotherDate)比較兩個(gè)日期的大小
4long getTime()返回自1970年1月1日00:00:00 GMT以來此Date對象表示的毫秒數(shù)
5String toString()把此Date對象轉(zhuǎn)換為以下形式的String:dow mon dd hh:mm:ss zzz yyyy其中:dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat)
import java.util.Date;

public class DateTest {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println("現(xiàn)在的系統(tǒng)時(shí)間是:"+date);
        long time=date.getTime();
        System.out.println("當(dāng)前時(shí)間距離UTC時(shí)間的毫秒數(shù):"+time);
    }
}

1.1.2 SimpleDateFormat類

Date類顯示的格式?jīng)]有考慮國際化問題,如該格式不符合中國人查看時(shí)間的格式習(xí)慣,因此需要對其進(jìn)行格式化操作。java.text.SimpleDateFormat類可以實(shí)現(xiàn)格式化操作,它是java.text.DateFormat的子類。

創(chuàng)建SimpleDateFormat類的對象非常簡單,可以使用如下構(gòu)造器:

  • SimpleDateFormat():用默認(rèn)的模式和默認(rèn)的語言環(huán)境的日期格式符號構(gòu)造SimpleDateFormat。
  • SimpleDateFormat(String pattern):用給定的模式和默認(rèn)語言環(huán)境的日期格式符號構(gòu)造SimpleDateFormat。
  • SimpleDateFormat(String pattern,Locale locale):用給定的模式和給定語言環(huán)境的日期格式符號構(gòu)造。

常見的日期格式化模板如下:

SimpleDataFormat類主要用于將Date日期轉(zhuǎn)換為字符串,或者將某個(gè)字符串轉(zhuǎn)換為Date對象,其常見方法如下所示:

方法定義描述
format將一個(gè)Date格式轉(zhuǎn)化為日期/時(shí)間字符串,此方法繼承的父類DateFormat的方法
parse從給定字符串的開始解析文本,以生成一個(gè)日期,此方法為繼承的父類DateFormat的方法
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatTest {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH小時(shí)mm分鐘ss秒S毫秒");
        System.out.println("使用指定格式的日期字符串:"+sdf.format(new Date()));
        String str="2021年1月15日 06小時(shí)44分鐘05秒 123毫秒";
        Date date = sdf.parse(str);
        System.out.println("日期對象:"+date);
    }
}

1.2 第二代日期類Calendar

Date類用于返回日期對象,不適合獲取日歷字段。設(shè)置和獲取日歷字段的方法,被JDK1.1推出的Calendar代替。

java.util.Calendar類是一個(gè)抽象類,它為特定瞬間與一組諸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日歷字段之間的轉(zhuǎn)換提供了一些方法,并為操作日歷字段(如獲得下星期的日期)提供了一些方法。

序號方法定義描述
1static getInstance()使用默認(rèn)時(shí)區(qū)和語言環(huán)境獲得一個(gè)日歷,也可以通過getInstance(TimeZone time,Locale loc)或指定時(shí)區(qū)和語言環(huán)境的日歷
2get(int field)獲取指定的日歷字段
3set(int year,int month,int date,int hourOfDay,int minute,int second)設(shè)置字段YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE和SECOND的值
public class CalendarTest {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"), Locale.CHINA);
        System.out.println("年:"+c.get(Calendar.YEAR));
        System.out.println("月:"+(c.get(Calendar.MONTH)+1));//1月從0開始
        System.out.println("日:"+c.get(Calendar.DAY_OF_MONTH));
        System.out.println("小時(shí):"+c.get(Calendar.HOUR));
        System.out.println("分鐘:"+c.get(Calendar.MINUTE));
        System.out.println("秒:"+c.get(Calendar.SECOND));
    }
}

上述代碼中的TimeZone表示時(shí)區(qū),Locale表示語言環(huán)境。例如TimeZone.getTimeZone("Asia/Shanghai")表示“亞洲/上海”時(shí)區(qū),Locale.CHINA表示中國語言環(huán)境。

1.3 第三代日期類

java8中引入的java.time糾正了過去的缺陷,這就是第三代日期API。

java8吸收了Joda-Time的精華,以一個(gè)新的開始為Java創(chuàng)建優(yōu)秀的API。新的java.time中包含了所有關(guān)于本地日期(LocalDate)、本地時(shí)間(LocalTime)、本地日期時(shí)間(LocalDateTime)、時(shí)區(qū)(ZonedDateTime)和持續(xù)時(shí)間(Duration)的類。歷史悠久的Date類也新增了toInstant()方法,用于把Date類轉(zhuǎn)換成新的表示形式。

接下來只介紹商用的幾個(gè)類型。

1.3.1 LocalDate、LocalTime、LocalDateTime類

這三個(gè)類都代表日期對象,只是包含的日歷字段不同,相當(dāng)于Calendar類的代替。

java.time.LocalDate類:代表一個(gè)只包含年、月、日的日期對象,如2007-12-03。LocalDate類常見方法如下所示。

序號方法定義描述
1static LocalDate now()返回默認(rèn)時(shí)區(qū)下的當(dāng)前日期對象
2int getYear()返回年份,從-999999999-01-01~+999999999-12-31
3int getMonth()返回月份,1-12
4int getDayOfMonth()返回日期,1-31
5LocalDate parse(CharSequence text)按默認(rèn)格式解析字符串為LocalDate的日期對象
6LocalDate parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串為LocalDate的日期對象

java.time.LocalTime類:代表一個(gè)只包含小時(shí)、分鐘、秒的日期對象,如13:45.30.123456789。LocalTime常見方法如下:

序號方法定義描述
1static LocalTime now()返回默認(rèn)時(shí)區(qū)下的當(dāng)前時(shí)間對象
2int getHour()返回小時(shí),0-23
3int getMinute()返回分鐘,0-59
4int getSecond()返回秒,0-59
5LocalTime parse(CharSequence text)按默認(rèn)格式解析字符串為LocalTime的日期對象
6LocalTime parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串為LocalTime的日期對象

java.time.LocalDateTime類:代表一個(gè)包含年、月、日、小時(shí)、分鐘、秒的日期對象,如2007-12-03T10:15:30。LocalDateTime常見方法如下:

序號方法定義描述
1static LocalDateTime now()返回默認(rèn)時(shí)區(qū)下的當(dāng)前日期對象
2int getYear()返回年份,從-999999999-01-01~+999999999-12-31
3int getMonth()返回月份,1-12
4int getDayOfMonth()返回日期:1-31
5int getHour()返回小時(shí):0-23
6int getMinute()返回分鐘:0-59
7int getSecond()返回秒:0-59
8LocalDateTime parse(CharSequence text)按默認(rèn)格式解析字符串為LocalDateTime的日期對象
9LocalDateTime parse(CharSequence text,DateTimeFormatter formatter)按指定格式解析字符串為LocalDateTime的日期對象
import java.time.LocalDateTime;

public class LocalDateTimeTest {
    public static void main(String[] args) {
        //1、創(chuàng)建一個(gè)日期對象
        LocalDateTime now = LocalDateTime.now();
        //2、獲取日歷字段
        System.out.println("年:"+now.getYear());
        System.out.println("月:"+now.getMonthValue());
        System.out.println("月:"+now.getMonth());
        System.out.println("日:"+now.getDayOfMonth());
        System.out.println("小時(shí):"+now.getHour());
        System.out.println("分鐘:"+now.getMinute());
        System.out.println("秒:"+now.getSecond());
    }
}

1.3.2 Instant類

在處理時(shí)間和日期時(shí),我們通常會想到年、月、日、時(shí)、分、秒。然而,這只是時(shí)間的一個(gè)模型,是面向人類的。第二種通用模型是面向計(jì)算機(jī)的,在此模型中,時(shí)間線中的一個(gè)點(diǎn)表示一個(gè)整數(shù),這有利于計(jì)算機(jī)處理。在UNIX中這個(gè)數(shù)從1970年開始,以秒為單位;同樣在Java中也是從1970年開始的,但以毫秒為單位。

java.time包通過值類型Instant提供機(jī)器視圖,不提供人類意義上的時(shí)間單位。Instant類表示時(shí)間線商的一點(diǎn),不需要要任何上下文信息。例如,時(shí)區(qū)。從概念上講,它只是簡單地表示自1970年1月1日0時(shí)0分0秒(UTC)開始地秒數(shù)。因?yàn)閖ava.time包是基于納秒計(jì)算的,所以Instant類的精度可以達(dá)到納秒級。

Instant類的常見方法如下:

序號方法定義描述
1static Instant now()靜態(tài)方法,返回默認(rèn)UTC時(shí)區(qū)的Instant類的對象
2static Instant ofEpochMillo(long epochMilli)靜態(tài)方法,返回在1970-01-01 00:00:00基礎(chǔ)上加上指定毫秒數(shù)之后的Instant類的對象
3static OffsetDateTime atOffset(ZoneOffset offset)結(jié)合即時(shí)的便宜來創(chuàng)建一個(gè)OffsetDateTime
4long toEpochMilli() 返回1970-01-01 00:00:00到當(dāng)前時(shí)間的毫秒數(shù),即時(shí)間戳

Instant類和第一代日期類Date的相互轉(zhuǎn)換:

import java.time.Instant;
import java.util.Date;

public class InstantTest {
    public static void main(String[] args) {
        //1、創(chuàng)建一個(gè)Instant對象
        Instant now = Instant.now();
        System.out.println("now="+now);
        //2、轉(zhuǎn)換方法
        //[1]Instant->Date
        Date d = Date.from(now);
        System.out.println("d="+d);
        //[2]Date->Instant
        Instant instant = d.toInstant();
        System.out.println("instant="+instant);
    }
}

1.3.3 DateTimeFormatter類

java.time.format.DateTimeFormatter類提供了格式化日期的方法,這個(gè)類和第一代日期的SimpleDateFormatter類似,但SimpleDateFormat只能格式化Date類,對Calendar類無效。DateTimeFormatter可以格式化LocalDate、LocalTime、LocalDateTime及Instant類。

DateTimeFormatter類常見方法如下:

序號方法定義描述
1static DateTimeFormatter ofPattern(String pattern)靜態(tài)方法,返回一個(gè)DateTimeFormatter對象
2String format(TemporalAccessor t)格式化一個(gè)日期、時(shí)間,返回字符串
3TemporalAccessor parse(CharSequence text)將指定格式的字符序列解析為一個(gè)日期、時(shí)間

TemporalAccessor 是java.time.temporal包下的接口,LocalDate、LocalTime、LocalDateTime、Instant都實(shí)現(xiàn)了該接口。

下面以LocalDateTime日期的格式為例,進(jìn)行代碼演示。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatterTest {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd a hh小時(shí)mm分鐘ss秒");
        //格式化日期(日期->文本)
        String format = dtf.format(now);
        System.out.println(format);
        //解析字符串為日期(文本->日期)
        String s="2018-08-08 下午 05小時(shí)06分鐘43秒";
        LocalDateTime parse = LocalDateTime.parse(s, dtf);
        System.out.println(parse);

    }
}

以上就是一文搞懂Java中的日期類的詳細(xì)內(nèi)容,更多關(guān)于Java日期類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot+SpringSecurity+JWT實(shí)現(xiàn)系統(tǒng)認(rèn)證與授權(quán)示例

    SpringBoot+SpringSecurity+JWT實(shí)現(xiàn)系統(tǒng)認(rèn)證與授權(quán)示例

    本文主要介紹了SpringBoot+SpringSecurity+JWT實(shí)現(xiàn)系統(tǒng)認(rèn)證與授權(quán)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 虛擬機(jī)linux中jdk安裝配置方法

    虛擬機(jī)linux中jdk安裝配置方法

    這篇文章主要為大家詳細(xì)介紹了虛擬機(jī)linux中jdk安裝配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java中如何獲取當(dāng)前服務(wù)器的IP地址

    Java中如何獲取當(dāng)前服務(wù)器的IP地址

    這篇文章主要給大家介紹了關(guān)于Java中如何獲取當(dāng)前服務(wù)器的IP地址的相關(guān)資料,我們可以使用Java中的InetAddress類來獲取Linux服務(wù)器的IP地址,需要的朋友可以參考下
    2023-07-07
  • 超詳細(xì)講解Java異常

    超詳細(xì)講解Java異常

    Java 異常機(jī)制可以使程序中異常處理代碼和正常業(yè)務(wù)代碼分離,保證程序代碼更加優(yōu)雅,并提高程序健壯性。本文超詳細(xì)講解了Java異常,感興趣的小伙伴可以參考一下這篇文章
    2021-09-09
  • 解決idea創(chuàng)建版本時(shí)只有Java21和Java17選項(xiàng)

    解決idea創(chuàng)建版本時(shí)只有Java21和Java17選項(xiàng)

    你是否在使用IntelliJ?IDEA創(chuàng)建新項(xiàng)目時(shí)遇到了只有Java?21和Java?17的選項(xiàng)?別擔(dān)心,我們的指南將為你提供解決方案,通過簡單的步驟,你將能夠選擇你需要的任何Java版本,繼續(xù)閱讀,讓我們開始吧!
    2024-03-03
  • SpringBoot3和mybatis-plus整合出現(xiàn)的問題解決辦法

    SpringBoot3和mybatis-plus整合出現(xiàn)的問題解決辦法

    SpringBoot和MybatisPlus的整合可以讓我們更加方便地進(jìn)行數(shù)據(jù)庫操作,這篇文章主要給大家介紹了關(guān)于SpringBoot3和mybatisplus整合出現(xiàn)的一些問題的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Spring 環(huán)境下實(shí)現(xiàn)策略模式的示例

    Spring 環(huán)境下實(shí)現(xiàn)策略模式的示例

    這篇文章主要介紹了Spring 環(huán)境下實(shí)現(xiàn)策略模式的示例,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-10-10
  • Java輸入年份和月份判斷多少天實(shí)例代碼

    Java輸入年份和月份判斷多少天實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java輸入年度和月份判斷多少天的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 淺談一下Java中的悲觀鎖和樂觀鎖

    淺談一下Java中的悲觀鎖和樂觀鎖

    這篇文章主要介紹了一下Java中的悲觀鎖和樂觀鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • java編程 中流對象選取規(guī)律詳解

    java編程 中流對象選取規(guī)律詳解

    下面小編就為大家?guī)硪黄猨ava編程 中流對象選取規(guī)律詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

香格里拉县| 德惠市| 南江县| 固镇县| 渭源县| 辰溪县| 古田县| 广州市| 喀喇沁旗| 宽甸| 上林县| 玛曲县| 邻水| 江永县| 汨罗市| 凤山市| 运城市| 云林县| 乐都县| 衡南县| 焦作市| 富裕县| 陇川县| 定远县| 四子王旗| 白山市| 若尔盖县| 嫩江县| 邻水| 房产| 怀远县| 普兰县| 阳新县| 康乐县| 曲阳县| 呼玛县| 修武县| 二连浩特市| 和田市| 共和县| 无锡市|