【java初探】——格式化字符串
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$s %1$d Android string (java & Android 格式化字符串)
1$s // String%1$d // int //R.string.old:<string name="old">我今年%1$d岁了</string> ...
- [java初探总结篇]__java初探总结
前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...
- java.text.MessageFormat格式化字符串时的小技巧
java.text.MessageFormat格式化字符串时的小技巧 public static void main(String[] args) throws InterruptedExceptio ...
- java中实现与.net的format格式化字符串输出
Java中的格式化字符串 System.out.println(MessageFormat.format("name={0}", "张三")); .net中的格 ...
- [Java初探04]__字符串(String类)相关
前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...
- JAVA中String.format的用法 格式化字符串,格式化数字,日期时间格式化,
1.对整数进行格式化:%[index$][标识][最小宽度]转换方式 我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...
- java 下对字符串的格式化
1.对整数进行格式化:%[index$][标识][最小宽度]转换方式 我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解 ...
- Java数字格式化输出时前面补0
Java数字格式化输出时前面补0 星期日 2014年11月30日| 分类: Java /** * 里数字转字符串前面自动补0的实现. * */ public class TestString ...
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
随机推荐
- linux systemctl 常用用法简介
主要介绍systemctl的几个功能如下: 1.查看某个服务的状态 2.关闭某个服务 3.开启某个服务 4.设置某个为开机自启动 5.关闭某个服务为开机不启动 6.查看所有开启启动的服务 1.查看某个 ...
- Web模板引擎—Mustache
Web模板引擎——Mustache 2012年9月12日 BY BELL·12 COMMENTS Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 ...
- python计算机硬件基础以及变量常量常量池,解释器编译器比较,python的两种运行方式
1.什么是编程语言 语言是一个事物与另外一个事物沟通的介质 编程语言是程序员与计算机沟通的介质 2.什么是编程 编程就是程序按照某种编程语言的语法规范将自己想要让计算机做的事情表达出来 表达的结果就是 ...
- NodeJs回调操作Promise化
mongoose是一个NodeJs下MongoDB的ORM库.使用这个库,您从DB到表(collection)都不用创建了.只需要在项目中定义好Model. 下面就是用上一篇的代码来演示如何把mong ...
- CountDownLatch同步辅助类
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...
- hdu1258
给你两个数t,n 接下来输入n个数字 让你输出所有数字相加等于n的组合 4 6 4 3 2 2 1 1 t n 4 3+1 2+2 2+1+1 Sample Input 4 6 4 3 2 2 1 1 ...
- 3.java面向对象编程三大特性之多态
面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...
- poj2481
题意:给定一些线段(s, e),起点为s,终点为e,求每一段线段被多少线段包含(不包括相等) 思路:很明显的树状数组题目..但是做的时候想了挺久..(下面的x为线段起点, y为线段终点) 做法1:先对 ...
- JMS 消息队列
1.jms broker服务器:Broker:消息队列核心,相当于一个控制中心,负责路由消息.保存订阅和连接.消息确认和控制事务
- Oracle EBS R12 XML数据表格的Excel脚本报表
http://www.cnblogs.com/quanweiru/archive/2012/07/28/2612680.html 一.概述 在EBS系统中,报表是一个非常重要的客户化开发内容,也是系统 ...