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

JAVA 格式化日期、時(shí)間的方法

 更新時(shí)間:2020年06月20日 09:57:45   作者:認(rèn)真對待世界的小白  
這篇文章主要介紹了JAVA 格式化日期、時(shí)間的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

使用 DateFormat 格式化日期、時(shí)間

DateFormat 也是一個(gè)抽象類,它也提供了如下幾個(gè)類方法用于獲取 DateFormat 對象。

  • getDateInstance():返回一個(gè)日期格式器,它格式化后的字符串只有日期,沒有時(shí)間。該方法可以傳入多個(gè)參數(shù),用于指定日期樣式和 Locale 等參數(shù);如果不指定這些參數(shù),則使用默認(rèn)參數(shù)。
  • getTimeInstance():返回一個(gè)時(shí)間格式器,它格式化后的字符串只有時(shí)間,沒有日期。該方法可以傳入多個(gè)參數(shù),用于指定時(shí)間樣式和 Locale 等參數(shù);如果不指定這些參數(shù),則使用默認(rèn)參數(shù)。
  • getDateTimeInstance():返回一個(gè)日期、時(shí)間格式器,它格式化后的字符串既有日期,也有時(shí)間。該方法可以傳入多個(gè)參數(shù),用于指定日期樣式、時(shí)間樣式和 Locale 等參數(shù);如果不指定這些參數(shù),則使用默認(rèn)參數(shù)。

上面三個(gè)方法可以指定日期樣式、時(shí)間樣式參數(shù),它們是的4個(gè)靜態(tài)常量:FULL、LONG、MEDIUM 和 SHORT,通過這4個(gè)樣式參數(shù)可以控制生成的格式化字符串??慈缦吕映绦?。

import java.util.*;
import java.text.*;
import static java.text.DateFormat.*;

public class DateFormatTest {
  public static void main(String[] args) throws ParseException {
    // 需要被格式化的時(shí)間
    Date dt = new Date();
    // 創(chuàng)建兩個(gè)Locale,分別代表中國、美國
    Locale[] locales = { Locale.CHINA, Locale.US };
    DateFormat[] df = new DateFormat[16];
    // 為上面兩個(gè)Locale創(chuàng)建16個(gè)DateFormat對象
    for (int i = 0; i < locales.length; i++) {
      df[i * 8] = DateFormat.getDateInstance(SHORT, locales[i]);
      df[i * 8 + 1] = DateFormat.getDateInstance(MEDIUM, locales[i]);
      df[i * 8 + 2] = DateFormat.getDateInstance(LONG, locales[i]);
      df[i * 8 + 3] = DateFormat.getDateInstance(FULL, locales[i]);
      df[i * 8 + 4] = DateFormat.getTimeInstance(SHORT, locales[i]);
      df[i * 8 + 5] = DateFormat.getTimeInstance(MEDIUM, locales[i]);
      df[i * 8 + 6] = DateFormat.getTimeInstance(LONG, locales[i]);
      df[i * 8 + 7] = DateFormat.getTimeInstance(FULL, locales[i]);
    }
    for (int i = 0; i < locales.length; i++) {
      String tip = i == 0 ? "----中國日期格式----" : "----美國日期格式----";
      System.out.println(tip);
      System.out.println("SHORT格式的日期格式:" + df[i * 8].format(dt));
      System.out.println("MEDIUM格式的日期格式:" + df[i * 8 + 1].format(dt));
      System.out.println("LONG格式的日期格式:" + df[i * 8 + 2].format(dt));
      System.out.println("FULL格式的日期格式:" + df[i * 8 + 3].format(dt));
      System.out.println("SHORT格式的時(shí)間格式:" + df[i * 8 + 4].format(dt));
      System.out.println("MEDIUM格式的時(shí)間格式:" + df[i * 8 + 5].format(dt));
      System.out.println("LONG格式的時(shí)間格式:" + df[i * 8 + 6].format(dt));
      System.out.println("FULL格式的時(shí)間格式:" + df[i * 8 + 7].format(dt));
    }
  }
}

上面程序共創(chuàng)建了16個(gè) DateFormat 對象,分別為中國、美國兩個(gè) Locale 各創(chuàng)建8個(gè) DateFormat 對象,分別是 SHORT、MEDIUM、LONG、FULL 四種樣式的日期格式器、時(shí)間格式器。運(yùn)行上面程序,會(huì)看到如下所示的效果。

----中國日期格式----
SHORT格式的日期格式:20-2-11
MEDIUM格式的日期格式:2020-2-11
LONG格式的日期格式:2020年2月11日
FULL格式的日期格式:2020年2月11日 星期二
SHORT格式的時(shí)間格式:下午2:26
MEDIUM格式的時(shí)間格式:14:26:21
LONG格式的時(shí)間格式:下午02時(shí)26分21秒
FULL格式的時(shí)間格式:下午02時(shí)26分21秒 CST
----美國日期格式----
SHORT格式的日期格式:2/11/20
MEDIUM格式的日期格式:Feb 11, 2020
LONG格式的日期格式:February 11, 2020
FULL格式的日期格式:Tuesday, February 11, 2020
SHORT格式的時(shí)間格式:2:26 PM
MEDIUM格式的時(shí)間格式:2:26:21 PM
LONG格式的時(shí)間格式:2:26:21 PM CST
FULL格式的時(shí)間格式:2:26:21 PM CST

DateFormat 具有國際化的能力,同一個(gè)日期使用不同的 Locale 格式器格式化的效果完全不同,格式化后的字符串正好符合 Locale 對應(yīng)的本地習(xí)慣。

獲得了 DateFormat 之后,還可以調(diào)用它的 setLenient(boolean lenient) 方法來設(shè)置該格式器是否采用嚴(yán)格語法。舉例來說,如果采用不嚴(yán)格的日期語法(該方法的參數(shù)為true),對于字符串"2004-2-31"將會(huì)轉(zhuǎn)換成2004年3月2日:如果采用嚴(yán)格的日期語法,解析該字符串時(shí)將拋出異常。

DateFormat 的 parse() 方法可以把一個(gè)字符串解析成 Date 對象,但它要求被解析的字符串必須符合日期字符串的要求,否則可能拋出 ParseExcepuon 異常。例如,如下代碼片段:

String str1 = "2017/10/07";
String str2 = "2017年10月07日";
// 下面輸出 Sat Oct 07 00:00:00 CST 2017
System.out.println(DateFormat.getDateInstance().parse(str2));
// 下面輸出 Sat Oct 07 00:00:00 CST 2017
System.out.println(DateFormat.getDateInstance(SHORT).parse(str1));
// 下面拋出 ParseException異常
System.out.println(DateFormat.getDateInstance().parse(str1));

上面代碼中最后一行代碼解析日期字符串時(shí)引發(fā) ParseException 異常,因?yàn)?2017/10/07"是一個(gè) SHORT 樣式的日期字符串,必須用 SHORT 樣式的 DateFormat 實(shí)例解析,否則將拋出異常。

使用 SimpleDateFormat 格式化日期

前面介紹的 DateFormat 的方法可以把字符串解析成 Date 對象,但實(shí)際上 DateFormat 的 parse() 方法不夠靈活一一它要求被解析的字符串必須滿足特定的格式!為了更好地格式化日期、解析日期字符串,Java 提供了 SimpleDateFormat 類。

SimpleDateFormat 是 DateFormat 的子類,正如它的名字所暗示的,它是“簡單”的日期格式器。很多讀者對“簡單”的日期格式器不屑一顧,實(shí)際上 SimpleDateFormat 比 DateFormat 更簡單,功能更強(qiáng)大。

SimpleDateFormat 可以非常靈活地格式化 Date,也可以用于解析各種格式的日期字符串。創(chuàng)建 SimpleDateFormat 對象時(shí)需要傳入一個(gè) pattern 字符串,這個(gè) pattern 不是正則表達(dá)式,而是一個(gè)日期模板字符串。

import java.text.*;
import java.util.*;

public class SimpleDateFormatTest {
  public static void main(String[] args) throws ParseException {
    Date d = new Date();
    // 創(chuàng)建一個(gè)SimpleDateFormat對象
    SimpleDateFormat sdf1 = new SimpleDateFormat("Gyyyy年中第D天");
    // 將d格式化成日期,輸出:公元2017年中第282天
    String dateStr = sdf1.format(d);
    System.out.println(dateStr);
    // 一個(gè)非常特殊的日期字符串
    String str = "14###3月##21";
    SimpleDateFormat sdf2 = new SimpleDateFormat("y###MMM##d");
    // 將日期字符串解析成日期,輸出:Fri Mar 21 00:00:00 CST 2014
    System.out.println(sdf2.parse(str));
  }
}

從上面程序中可以看出,使用 SimpleDateFormat 可以將日期格式化成形如“公元2014年中第101天”這樣的字符串,也可以把形如“14###3月##21”這樣的字符串解析成日期,功能非常強(qiáng)大。

SimpleDateFormat 把日期格式化成怎樣的字符串,以及能把怎樣的字符串解析成 Date,完全取決于創(chuàng)建該對象時(shí)指定的 pattern 參數(shù),pattern 是一個(gè)使用日期字段占位符的日期模板。

如果讀者想知道 SimpleDateFormat 支持哪些日期、時(shí)間占位符,可以查閱 API 文檔中 SimpleDateFormat 類的說明,此處不再贅述。

Java 8 新增的日期、時(shí)間格式器

Java 8 新增的日期、時(shí)間 API 里不僅包括了 Instant、LocalDate、LocalDateTime、LocalTime 等代表日期、時(shí)間的類,而且在 java.time.format 包下提供了一個(gè) DateTimeFormatter 格式器類,該類相當(dāng)于前面介紹的 DateFormat 和 SimpleDateFormat 的合體,功能非常強(qiáng)大。

與 DateFormat、SimpleDateFormat 類似,DateTimeFormatter 不僅可以將日期、時(shí)間對象格式化成字符串,也可以將特定格式的字符串解析成日期、時(shí)間對象。

為了使用 DateTimeFormatter 進(jìn)行格式化或解析,必須先獲取 DateTimeFormatter 對象,獲取 DateTimeFormatter 對象有如下三種常見的方式。

  • 直接使用靜態(tài)常量創(chuàng)建 DateTimeFormatter 格式器。DateTimeFormatter 類中包含了大量形如 ISO_LOCAL_DATE、ISO_LOCAL_TIME、ISO_LOCAL_DATE_TIME 等靜態(tài)常量,這些靜態(tài)常量本身就是 DateTimeFormatter 實(shí)例。
  • 使用代表不同風(fēng)格的枚舉值來創(chuàng)建 DateTimeFormatter 格式器。在 FormatStyle 枚舉類中定義了 FULL、LONG、MEDIUM、SHORT 四個(gè)枚舉值,它們代表日期、時(shí)間的不同風(fēng)格。
  • 根據(jù)模式字符串來創(chuàng)建 DateTmeFormatter 格式器。類似于 SimpleDateFormat,可以采用模式字符串來創(chuàng)建 DateTimeFormatter,如果需要了解支持哪些模式字符串,則需要參該類的 API 文檔。

使用 DateTimeFormatter 完成格式化

使用 DateTimeFormatter 將日期、時(shí)間(LocalDate、LocalDateTime、LocalTime等實(shí)例)格式化為字符串,可通過如下兩種方式。

  • 調(diào)用 DateTimeFormatter 的 format(TemporalAccessor temporal) 方法執(zhí)行格式化,其中 LocalDate、LocalDateTime、LocalTime 等類都是 TemporalAccessor 接口的實(shí)現(xiàn)類。
  • 調(diào)用 LocalDate、LocalDateTime、LocalTime 等日期、時(shí)間對象的 format(DateTimeFormatter formatter) 方法執(zhí)行格式化。

上面兩種方式的功能相同,用法也基本相似,如下程序示范了使用 DateTimeFormatter 來格式化日期、時(shí)間。

import java.time.*;
import java.time.format.*;

public class NewFormatterTest{
  public static void main(String[] args){
    DateTimeFormatter[] formatters = new DateTimeFormatter[]{
      // 直接使用常量創(chuàng)建DateTimeFormatter格式器
      DateTimeFormatter.ISO_LOCAL_DATE,
      DateTimeFormatter.ISO_LOCAL_TIME,
      DateTimeFormatter.ISO_LOCAL_DATE_TIME,
      // 使用本地化的不同風(fēng)格來創(chuàng)建DateTimeFormatter格式器
      DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM),
      DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG),
      // 根據(jù)模式字符串來創(chuàng)建DateTimeFormatter格式器
      DateTimeFormatter.ofPattern("Gyyyy%%MMM%%dd HH:mm:ss")
    };
    LocalDateTime date = LocalDateTime.now();
    // 依次使用不同的格式器對LocalDateTime進(jìn)行格式化
    for(int i = 0 ; i < formatters.length ; i++){
      // 下面兩行代碼的作用相同
      System.out.println(date.format(formatters[i]));
      System.out.println(formatters[i].format(date));
    }
  }
}

上面程序使用三種方式創(chuàng)建了6個(gè) DateTimeFormatter 對象,然后程序中兩行粗體字代碼分別使用不同方式來格式化日期。運(yùn)行上面程序,會(huì)看到如下所示的效果。

2020-02-11
2020-02-11
17:13:00.303
17:13:00.303
2020-02-11T17:13:00.303
2020-02-11T17:13:00.303
2020年2月11日 星期二 17:13:00
2020年2月11日 星期二 17:13:00
2020年2月11日
2020年2月11日
公元2020%%二月%%11 17:13:00
公元2020%%二月%%11 17:13:00

可以看出,使用 DateTimeFormatter 進(jìn)行格式化,也可使用模式字符串對日期、時(shí)間進(jìn)行自定義格式化,由此可見,功能完全覆蓋了傳統(tǒng)的 DateFormat、SimpleDateFormate 的功能。

提示:有些時(shí)候,讀者可能還需要使用傳統(tǒng)的 DateFormat 來執(zhí)行格式化,DateTimeFormatter 則提供了一個(gè) toFormat() 方法,該方法可以獲取 DateTimeFormatter 對應(yīng)的 Format 對象。

使用 DateTimeFormatter 解析字符串

為了使用 DateTimeFormatter 將指定格式的字符串解析成日期、時(shí)間對象(LocalDate、LocalDateTime、LocalTime 等實(shí)例),可通過日期、時(shí)間對象提供的 parse(CharSequence text,DateTimeFormatter formatter) 方法進(jìn)行解析。

如下程序示范了使用 DateTimeFormatter 解析日期、時(shí)間字符串。

import java.time.*;
import java.time.format.*;

public class NewFormatterParse {
  public static void main(String[] args) {
    // 定義一個(gè)任意格式的日期時(shí)間字符串
    String str1 = "2014==04==12 01時(shí)06分09秒";
    // 根據(jù)需要解析的日期、時(shí)間字符串定義解析所用的格式器
    DateTimeFormatter fomatter1 = DateTimeFormatter.ofPattern("yyyy==MM==dd HH時(shí)mm分ss秒");
    // 執(zhí)行解析
    LocalDateTime dt1 = LocalDateTime.parse(str1, fomatter1);
    System.out.println(dt1); // 輸出 2014-04-12T01:06:09
    // ---下面代碼再次解析另一個(gè)字符串---
    String str2 = "2014$$$4月$$$13 20小時(shí)";
    DateTimeFormatter fomatter2 = DateTimeFormatter.ofPattern("yyy$$$MMM$$$dd HH小時(shí)");
    LocalDateTime dt2 = LocalDateTime.parse(str2, fomatter2);
    System.out.println(dt2); // 輸出 2014-04-13T20:00
  }
}

上面程序中定義了兩個(gè)不同格式的日期、時(shí)間字符串,為了解析它們,程序分別使用對應(yīng)的格式字符串創(chuàng)建了 DateTmeFormatter 對象,這樣 DateTimeFormatter 即可按該格式字符串將日期、時(shí)間字符串解析成 LocalDateTime 對象。編譯、運(yùn)行該程序,即可看到兩個(gè)日期、時(shí)間字符串都被成功地解析成 LocalDateTime。

以上就是JAVA 格式化日期、時(shí)間的方法的詳細(xì)內(nèi)容,更多關(guān)于JAVA 格式化日期、時(shí)間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于Java集合框架的總結(jié)

    關(guān)于Java集合框架的總結(jié)

    下面小編就為大家?guī)硪黄P(guān)于Java集合框架的總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • springboot配置redis過程詳解

    springboot配置redis過程詳解

    這篇文章主要介紹了springboot配置redis過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • SpringBoot使用AES對JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法

    SpringBoot使用AES對JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot使用AES對JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法,文章通過代碼示例介紹的非常詳細(xì),對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-08-08
  • SpringBoot整合WebSocket實(shí)現(xiàn)實(shí)時(shí)通信功能

    SpringBoot整合WebSocket實(shí)現(xiàn)實(shí)時(shí)通信功能

    在當(dāng)今互聯(lián)網(wǎng)時(shí)代,實(shí)時(shí)通信已經(jīng)成為了許多應(yīng)用程序的基本需求,而WebSocket作為一種全雙工通信協(xié)議,為開發(fā)者提供了一種簡單、高效的實(shí)時(shí)通信解決方案,本文將介紹如何使用SpringBoot框架來實(shí)現(xiàn)WebSocket的集成,快速搭建實(shí)時(shí)通信功能,感興趣的朋友可以參考下
    2023-11-11
  • SSM 整合的配合文件(分享)

    SSM 整合的配合文件(分享)

    下面小編就為大家分享一篇SSM 整合的配合文件,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java創(chuàng)建型設(shè)計(jì)模式之單例模式

    Java創(chuàng)建型設(shè)計(jì)模式之單例模式

    Java單例模式是一種設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)。可以使用多種方式實(shí)現(xiàn)單例模式,如餓漢式、懶漢式、雙重檢查鎖定、靜態(tài)內(nèi)部類、枚舉等,每種方式都有其優(yōu)缺點(diǎn),需要根據(jù)具體情況選擇使用
    2023-05-05
  • 如何修改FeginCilent定義的服務(wù)名到指定服務(wù)

    如何修改FeginCilent定義的服務(wù)名到指定服務(wù)

    這篇文章主要介紹了修改FeginCilent定義的服務(wù)名到指定服務(wù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 利用Java如何實(shí)現(xiàn)將二維數(shù)組轉(zhuǎn)化為鏈?zhǔn)絻?chǔ)存

    利用Java如何實(shí)現(xiàn)將二維數(shù)組轉(zhuǎn)化為鏈?zhǔn)絻?chǔ)存

    鏈?zhǔn)浇Y(jié)構(gòu)不要求邏輯上相鄰的節(jié)點(diǎn)在物理位置上也相鄰,節(jié)點(diǎn)間的邏輯關(guān)系是由附加的指針字段表示的,通常借助于程序設(shè)計(jì)中的指針結(jié)構(gòu)來實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于利用Java如何實(shí)現(xiàn)將二維數(shù)組轉(zhuǎn)化為鏈?zhǔn)絻?chǔ)存的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Java 使用JdbcTemplate 中的queryForList發(fā)生錯(cuò)誤解決辦法

    Java 使用JdbcTemplate 中的queryForList發(fā)生錯(cuò)誤解決辦法

    這篇文章主要介紹了Java 使用JdbcTemplate 中的queryForList發(fā)生錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Spring測試 其實(shí)很簡單

    Spring測試 其實(shí)很簡單

    這篇文章主要為大家詳細(xì)介紹了Spring測試,其實(shí)很簡單,揭開集成測試神秘的面紗,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評論

沅江市| 凭祥市| 右玉县| 南澳县| 凤凰县| 色达县| 海晏县| 清丰县| 佳木斯市| 太仓市| 威海市| 阆中市| 湘潭县| 渝中区| 三河市| 兴宁市| 宜春市| 上蔡县| 阆中市| 赤峰市| 东丽区| 雅安市| 淮安市| 伊金霍洛旗| 阿克陶县| 沙洋县| 阜康市| 金沙县| 阜城县| 凤冈县| 巴林左旗| 西平县| 凤城市| 东明县| 宿迁市| 凯里市| 奎屯市| 江源县| 平潭县| 揭阳市| 汉中市|