[Java初探04.1]——格式化字符串


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268