亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JAVA 格式化日期、時間的方法

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

使用 DateFormat 格式化日期、時間

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

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

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

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

public class DateFormatTest {
  public static void main(String[] args) throws ParseException {
    // 需要被格式化的時間
    Date dt = new Date();
    // 創(chuàng)建兩個Locale,分別代表中國、美國
    Locale[] locales = { Locale.CHINA, Locale.US };
    DateFormat[] df = new DateFormat[16];
    // 為上面兩個Locale創(chuàng)建16個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格式的時間格式:" + df[i * 8 + 4].format(dt));
      System.out.println("MEDIUM格式的時間格式:" + df[i * 8 + 5].format(dt));
      System.out.println("LONG格式的時間格式:" + df[i * 8 + 6].format(dt));
      System.out.println("FULL格式的時間格式:" + df[i * 8 + 7].format(dt));
    }
  }
}

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

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

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

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

DateFormat 的 parse() 方法可以把一個字符串解析成 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));

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

使用 SimpleDateFormat 格式化日期

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

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

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

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

public class SimpleDateFormatTest {
  public static void main(String[] args) throws ParseException {
    Date d = new Date();
    // 創(chuàng)建一個SimpleDateFormat對象
    SimpleDateFormat sdf1 = new SimpleDateFormat("Gyyyy年中第D天");
    // 將d格式化成日期,輸出:公元2017年中第282天
    String dateStr = sdf1.format(d);
    System.out.println(dateStr);
    // 一個非常特殊的日期字符串
    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)建該對象時指定的 pattern 參數(shù),pattern 是一個使用日期字段占位符的日期模板。

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

Java 8 新增的日期、時間格式器

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

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

為了使用 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 實例。
  • 使用代表不同風(fēng)格的枚舉值來創(chuàng)建 DateTimeFormatter 格式器。在 FormatStyle 枚舉類中定義了 FULL、LONG、MEDIUM、SHORT 四個枚舉值,它們代表日期、時間的不同風(fēng)格。
  • 根據(jù)模式字符串來創(chuàng)建 DateTmeFormatter 格式器。類似于 SimpleDateFormat,可以采用模式字符串來創(chuàng)建 DateTimeFormatter,如果需要了解支持哪些模式字符串,則需要參該類的 API 文檔。

使用 DateTimeFormatter 完成格式化

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

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

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

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個 DateTimeFormatter 對象,然后程序中兩行粗體字代碼分別使用不同方式來格式化日期。運行上面程序,會看到如下所示的效果。

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)行格式化,也可使用模式字符串對日期、時間進(jìn)行自定義格式化,由此可見,功能完全覆蓋了傳統(tǒng)的 DateFormat、SimpleDateFormate 的功能。

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

使用 DateTimeFormatter 解析字符串

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

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

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

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

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

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

相關(guān)文章

  • Spring?Boot自定義?Starter并推送到遠(yuǎn)端公服的詳細(xì)代碼

    Spring?Boot自定義?Starter并推送到遠(yuǎn)端公服的詳細(xì)代碼

    這篇文章主要介紹了Spring?Boot自定義?Starter并推送到遠(yuǎn)端公服,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Springboot?如何使用BindingResult校驗參數(shù)

    Springboot?如何使用BindingResult校驗參數(shù)

    這篇文章主要介紹了Springboot?如何使用BindingResult校驗參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 詳解java自定義類

    詳解java自定義類

    這篇文章主要介紹了java自定義類的概念以及用法,文中講解非常詳細(xì),實例代碼幫助大家更好的理解,感興趣的朋友可以參考下
    2020-06-06
  • Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進(jìn)行參數(shù)驗證

    Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進(jìn)行參數(shù)驗證

    在后端開發(fā)中,參數(shù)校驗是非常普遍的,下面這篇文章主要給大家介紹了關(guān)于Java參數(shù)校驗詳解之使用@Valid注解和自定義注解進(jìn)行參數(shù)驗證的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Java并發(fā)編程中的ConcurrentLinkedQueue詳解

    Java并發(fā)編程中的ConcurrentLinkedQueue詳解

    這篇文章主要介紹了Java并發(fā)編程中的ConcurrentLinkedQueue詳解,GetThread線程不會因為ConcurrentLinkedQueue隊列為空而等待,而是直接返回null,所以當(dāng)實現(xiàn)隊列不空時,等待時,則需要用戶自己實現(xiàn)等待邏輯,需要的朋友可以參考下
    2023-12-12
  • Spring OAuth2.0 單元測試解決方案

    Spring OAuth2.0 單元測試解決方案

    這篇文章主要介紹了Spring OAuth2.0 單元測試解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 老生常談java數(shù)組中的常見異常

    老生常談java數(shù)組中的常見異常

    數(shù)組是用來存儲一系列數(shù)據(jù),但它往往被認(rèn)為是一系列相同類型的變量,異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并且錯誤有時候是可以避免的,接下來讓我們詳細(xì)的了解吧
    2022-03-03
  • 輕松掌握J(rèn)ava備忘錄模式

    輕松掌握J(rèn)ava備忘錄模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava備忘錄模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java實現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    Java實現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    本文主要為大家詳細(xì)介紹了如何在Java項目中引用aspose-words和poi-tljar包實現(xiàn)word文檔轉(zhuǎn)成圖片,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • 詳解Java中使用泛型實現(xiàn)快速排序算法的方法

    詳解Java中使用泛型實現(xiàn)快速排序算法的方法

    這篇文章主要介紹了Java中使用泛型實現(xiàn)快速排序算法的方法,快速排序的平均時間復(fù)雜度為(n\log n),文中的方法立足于基礎(chǔ)而并沒有考慮優(yōu)化處理,需要的朋友可以參考下
    2016-05-05

最新評論