【java初探】——格式化字串

小舍先生發表於2019-03-27

String 類的靜態方法format()方法用於建立格式化字串,format()方法有兩種過載形式:

  • format(String fromat,Object...args)
    該方法使用指定的格式字串和引數返回一個格式化的字串,格式化後的新字串使用本地預設的語言環境。
    語法:String.format(String.format,Object...args)
    Date date = new Date();
    String.format("%tH",date);
  • format(Local l,String,Oblect...args)
    Date date = new Date();
    String.format(Locale.CANADA,"%tH",date); //Locale 引數可以指定預設的語言環境。
  • 注意:
    • l:格式化過程中要應用的語言環境。如果l為null,則不進行本地化。
    • format:格式字串。
    • args:格式字串有格式說明符應用的引數。如果還有格式說明符意外的引數,則可以忽略這些額外的引數,此引數是可變的,可以為0。
  • 日期的格式化

    在程式設計中,經常涉及到時間以及日期的輸入輸出,想要輸出滿意的日期和時間格式需要大量的程式碼和演算法才能實現。
    Java中format()方法通過給特定的轉換字元作為引數來實現對時間和日期的格式化,方便平時的使用。

    • 返回一個月中的天數:
    Date date = new Date();         //建立Date物件date。
    // 定義一個String型別的的資料 s,並通過String的format方法對其初始化賦值。
    String s = String.format("%te",date);      //通過format() 方法對date進行格式化,。

    然後我們可以控制輸出一下:

    System.out.println("今天是一個月中的第:"+s+"天");    // 控制輸出Date物件s。

    輸出結果:
    2019_3_26_001.png

上述的程式碼中的變數s的值是當前日期在當月中的第幾天。%te是轉換符。通常使用的日期轉換符如下表所示。

轉換符 說明 示例
%ta 指定環境下的星期幾簡稱 mon,星期一
%tA 指定語言環境下的星期幾全稱 monday,星期一
%tb 指定語言環境下的月份簡稱 feb,二月
%tB 指定語言環境的月份全稱 february,二月
%te 一個月中的第幾天 (1-31)2
%tc 包括全部日期和時間資訊 星期二,三月 25 13:37:22 cst 2019
%td 一個月中的第幾天(01-31) 02
%te 一個月中的某一天 2
%tm 月份 03
%ty 2位年份 19
%tY 4位年份 2019
%tj 一年中的第幾天(001-366) 03

在專案中建立類,並實現當前日期的各種格式的輸出:
***

public static  void main(String[] args){
    /*
     * 日期的格式化
     */
    Date date = new Date();
    String s=String.format("%tc", date); //通過format()方法對date格式化。
    System.out.println(s);// 將date賦值給一個字串的時候輸出的卻是當前語言的格式。
    System.out.println(date);//直接輸出date是英文格式下的全部時間及日期資訊。
    System.out.println("------------------------分界線-----------------------------------");
    String day = String.format("%te", date);//一個月中的某一天。
    String month = String.format("%tb", date);//指定語言環境下的月份
    String week = String.format("%ta", date);//指定環境下星期
    String foryear = String.format("%tY", date);//四位年份
    String oneyearday = String.format("%tj", date);//一年中的第幾天
    String onemonthday = String.format("%td", date);//一個月中的第幾天
    String onemonth = String.format("%tm", date);//月份(純數字)
    String twoyear = String.format("%ty", date);//兩位數年份
    
    System.out.println(day);
    System.out.println(month);
    System.out.println(week);
    System.out.println(foryear);
    System.out.println(oneyearday);
    System.out.println(onemonthday);
    System.out.println(onemonth);
    System.out.println(twoyear);
    System.out.println("------------------------分界線-----------------------------------");
    System.out.println(foryear +"."+onemonth+"."+ onemonthday);//輸出數字格式年月份。
    System.out.println(foryear+"年"+month+week);

輸出結果:
2019_3_26_002.png


  • 時間的格式化

使用format()方法,不僅能夠實現日期的格式化,還可以實現時間的格式化,且,時間的格式化要更多,更精確,它可以將時間格式化為時,分,秒,毫秒。格式化時間的轉換符如下表。

轉換符 說明 示例
%tH 2位數的24小時制小時(00-23) 14
%tI 2位數的12小時制小時(01-12) 05
%tK 2位數的24小時的小時(0-23) 5
%tl 2位數的12小時制的小時(1-12) 10
%M 2位數的分鐘(00-59) 05
%tS 2位數的秒數 14
%tL 3位數的毫秒數 920
%tN 九位數的微妙數 062000000
%tp 指定環境下上午或下午的標記 下午,pm
%tz 相對於GMT RFC 82格式的數字時區偏移量 CST
%tZ 時區的縮寫形式的字串 CST
%ts 1970-01-01 00:00:00 至現在經過的秒數 1206426646
%tQ 1970-01-01 00:00:00 至現在經過的毫秒數 1206426737453

建立相關類,實現當前時間資訊的各種初始化。

/*
     * 時間的格式化
     */
    String hour=String.format("%tH", date); //格式化date,24小時制的小時。
    String minute=String.format("%tM", date);  // 兩位數的分鐘。
    String second=String.format("%tS", date);   // 兩位數的秒鐘。
    System.out.println("現在的時間是:"+hour+"點"+minute+"分"+second+"秒");//輸出時間。
    

輸出結果:

2019-2-26-003.png


  • 時間與日期的組合格式化

那麼現在,我們學會了時間及日期分別的不同型別的格式化,而在日常使用中呢,我們通常是將兩者結合,輸出固定格式的時間日期。那麼接下來,我們將時間,日期的格式化通過不同的組合,就可以輸出不同格式化的時間日期顯示了。

首先,讓我們嘗試一下使用多種格式化的方法自己組合完整的時間日期格式化:

/**
 *  通過時間與日期的多種不同的格式化方法組合,在加上略微的調整,就可以格式化出完整的時間日期的格式了。
 *  但我們很容易的發現,這樣一個一個的組合起來實在是太麻煩了。那麼format()也有完整的格式化時間,以及日期的方法,方便使用。
  */
    System.out.println(foryear +"-"+onemonth+"-"+ onemonthday+" "+hour+":"+minute+":"+second);
    

輸出結果:
2019-2-26-004.png

現在我們知道了自己組合使勁按與日期的完整格式化輸出實在是太麻煩了,並且我們也知道了format()方法中也給我們提供了完整的時間與日期的幾種格式化方案,我們可以按照需要選擇不同的方案來組合不同的格式化時間日期輸出。時間,日期的幾種最常見的格式化轉換符如下表所示:

轉換符 說明 示例
%tF 按照年-月-日格式輸出(4位年份) 2019-2-26
%tD 月/日/年格式輸出(2位年份) 02/26/19
%tc 輸出全部日期和時間資訊 星期三 三月 25 15:20:03 CST 2019
%tr 時:分:秒 PM(AM)格式(12小時制) 10:23:45 下午
%tT 時:分:秒格式(12小時制) 15:23:34
%tR 時:分格式(24小時制) 15:34

下面我們在建立的專案類中定義這樣幾個字串,並使用String的fromat()方法格式化時間日期,並賦值給這幾個字串,然後我們在進行輸出,來嘗試下這種時間日期的格式化輸出方式。

// 定義幾個不同的字串資料,並初始化賦值,使用String的fromat() 方法將date物件格式化後賦值給字串。
String day1=String.format("%tF", date);//第一種日期格式 2019-03-26
    String day2=String.format("%tD", date);//第二種日期格式 03/26/19
    String time1=String.format("%tr", date);//第一種時間格式 03:22:34 下午 (時:分:秒 PM/AM 12小時制)
    String time2=String.format("%tT", date);//第二種時間格式 15:34:23 (時:分:秒 24小時制)
    String time3=String.format("%tR", date);//第三種時間格式 15:23 (時:分)

    String timeandday=String.format("%tc",date);// 輸出全部時間日期資訊。

然後進行輸出:

System.out.println("------------------------分界線-----------------------------------");
    System.out.println(day1); // 輸出各種格式化時間日期.
    System.out.println(day2);
    System.out.println(time1);
    System.out.println(time2);
    System.out.println(time3);

    System.out.println(timeandday);
        System.out.println("------------------------分界線-----------------------------------");
    System.out.println("直接輸出格式化後的date物件:"+String.format("%tF",date)+" "+String.format("%tT",date)); //直接輸出格式化的date物件。
    System.out.println("通過變數賦值,間接輸出格式化時間日期;"+day1+" "+time2);//組合兩種格式,輸出完整的日期時間格式。

輸出結果:
2019-3-26-5.png

最後我們結合這兩種格式化,將日期時間完整的格式化輸出:

//我們可以明顯的發現,這樣的格式化輸出,明顯要比之前的好很多。

System.out.println(day1+" "+time2);//組合兩種格式,輸出完整的日期時間格式。

  • 常規型別的格式化

我們知道,資料型別有幾大常規型別,那麼關於常規型別的資料型別的格式化,需要注意的一點是,常規資料型別的格式化是可以應用於任何引數型別的。可通過下表轉換符來實現。

轉換符 說明 示例
%b,%B 結果轉換為布林型別 true
%h,%H 結果被格式化為雜湊碼 A05A5198
%s,%S 結果被格式化字串 "abcd"
%c,%C 結果被格式為字元型別 ‘a’
%d 結果被格式為十進位制整數 40
%o 結果被格式為八進位制整數 11
%x,%X 結果被格式為十六進位制整數 4b1
%e 結果被格式為用電腦科學計數法表示的十進位制數 1.700000e+01
%a 結果被格式化為帶有效數字和指數的十六進位制的浮點值 0X1.C0000000000001P4
%n 結果被特定於平臺的行分隔符
%% 結果為字面值‘%’ %

接下來我們動手實驗下,隨便定義幾個字串型別的變數,並使用String靜態類的format()方法來嘗試使用不同的轉換符格式化不同的基本資料型別:

String str = String.format("%d",400/2);  // 將結果格式化為十進位制數。
    String str1 = String.format("%b",3>5);  // 將結果格式化為布林型別。
    String str2 = String.format("%x",200);  // 將結果格式化為十六進位制制數。

    System.out.println(str);
    System.out.println(str1);
    System.out.println(str2);

輸出結果:
2019-3-26-6.png


更新時間:
2019-3-26 21:51

相關文章