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

【java初探】——格式化字符串的更多相关文章

  1. %1$s %1$d Android string (java & Android 格式化字符串)

    1$s // String%1$d // int //R.string.old:<string name="old">我今年%1$d岁了</string> ...

  2. [java初探总结篇]__java初探总结

    前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...

  3. java.text.MessageFormat格式化字符串时的小技巧

    java.text.MessageFormat格式化字符串时的小技巧 public static void main(String[] args) throws InterruptedExceptio ...

  4. java中实现与.net的format格式化字符串输出

    Java中的格式化字符串 System.out.println(MessageFormat.format("name={0}", "张三")); .net中的格 ...

  5. [Java初探04]__字符串(String类)相关

    前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...

  6. JAVA中String.format的用法 格式化字符串,格式化数字,日期时间格式化,

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式        我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...

  7. java 下对字符串的格式化

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式         我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解 ...

  8. Java数字格式化输出时前面补0

    Java数字格式化输出时前面补0 星期日 2014年11月30日|  分类: Java     /** * 里数字转字符串前面自动补0的实现. * */ public class TestString ...

  9. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

随机推荐

  1. Spring MVC 指导文档解读(二)

    Special Bean Types In the WebApplicationContext 解读 1.WebApplicationContext 特有的几种 Bean Types 2. 也表明 与 ...

  2. DynamicJson-好用dotnet4的json对象

    最近看的书很杂,也深深被ES6的语法感动了,原来javascript可以这么好用.于是重新学习C#4.5.6,发现有一个dynamic就象是一个javascript对象,好玩!且有人写了一个json到 ...

  3. PAT甲级 1121. Damn Single (25)

    1121. Damn Single (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue "Dam ...

  4. 转:spring的启动过程-spring和springMVC父子容器的原理

    要想很好理解这三个上下文的关系,需要先熟悉spring是怎样在web容器中启动起来的.spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程. s ...

  5. Python自动化开发 - 进程、线程(一)

    本节内容 1.操作系统发展史 2.进程和线程 3.Python threading 模块 一.操系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统 ...

  6. MySQL表名大小写设置

    1 简介    在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小 ...

  7. [leetcode 14]Longest Common Prfix

    1 题目: Write a function to find the longest common prefix string amongst an array of strings. Hide Ta ...

  8. JS学习笔记5_DOM

    1.DOM节点的常用属性(所有节点都支持) nodeType:元素1,属性2,文本3 nodeName:元素标签名的大写形式 nodeValue:元素节点为null,文本节点为文本内容,属性节点为属性 ...

  9. Nginx负载均衡初识

    1.背景 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外ngi ...

  10. 关于SpringBoot开发微信模板推送

    在这里演示一下微信的模板消息推送: 这里使用微信测试号 来演示: 先看下效果吧: 1.首先需要申请一个  微信测试号   https://mp.weixin.qq.com/wiki?t=resourc ...