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。
输出结果:
上述的代码中的变量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);
输出结果:
-
时间的格式化
使用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+"秒");//输出时间。
输出结果:
-
时间与日期的组合格式化
那么现在,我们学会了时间及日期分别的不同类型的格式化,而在日常使用中呢,我们通常是将两者结合,输出固定格式的时间日期。那么接下来,我们将时间,日期的格式化通过不同的组合,就可以输出不同格式化的时间日期显示了。
首先,让我们尝试一下使用多种格式化的方法自己组合完整的时间日期格式化:
/**
* 通过时间与日期的多种不同的格式化方法组合,在加上略微的调整,就可以格式化出完整的时间日期的格式了。
* 但我们很容易的发现,这样一个一个的组合起来实在是太麻烦了。那么format()也有完整的格式化时间,以及日期的方法,方便使用。
*/
System.out.println(foryear +"-"+onemonth+"-"+ onemonthday+" "+hour+":"+minute+":"+second);
输出结果:
现在我们知道了自己组合使劲按与日期的完整格式化输出实在是太麻烦了,并且我们也知道了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);//组合两种格式,输出完整的日期时间格式。
输出结果:
最后我们结合这两种格式化,将日期时间完整的格式化输出:
//我们可以明显的发现,这样的格式化输出,明显要比之前的好很多。
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 21:51