【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 ...
随机推荐
- python输出显示颜色
显示颜色格式:\033[显示方式;字体色;背景色m......[\033[0m] ------------------------------------------- --------------- ...
- C++类、继承、多态、虚函数
一个比较好的虚函数例子 /****************************/ /* 作者:骆天 */ /* 时间:2018/1/26 */ /* 代码:多态的理解 */ /********** ...
- winSocket编程(九)重叠IO
重叠模型的优点 重叠模型的基本原理 关于重叠模型的基础知识 重叠模型的实现步骤 多客户端情况的注意事项 一.重叠模型的优点 1.可以运行在支持Winsock2的所有Windows平台 ,而不像完成端口 ...
- 20171126--fragment的小项目
1.在使用fragment时候,初始化的时候报了两个错误,解决方法如下文所示:https://www.2cto.com/kf/201706/650158.html 其实一共报了两个错误: androi ...
- Java Applet小应用
开发和部署方式 嵌入到HTML网页中,用<Applet></Applet>标签识别.java环境用浏览器的,在第一次打开时下载,可开发成以后打开,默认不必再次下载.也可 ...
- day26(分页查询)
分页查询思路 问题: 服务器向浏览器想用数据很多的时候可以对数据进行封装. domain层 封装数据 package com.baidu.domain; import java.util.List; ...
- Leetcod--20. Valid Parentheses(极简洁的括号匹配)
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- codeforces 891 b
B. Gluttony time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- [ 9.12 ]CF每日一题系列—— 960B暴力数组
Description: 给你两个数组,顺序一定,问你第一个数组连续的几个值等于下一个数组连续的几个值,然后寻找这个值得最大值,也就是满足就换 Solution: 用两个变量索引,判断即可 #incl ...
- 由异常掉电问题---谈xfs文件系统
由异常掉电问题---谈xfs文件系统 本文皆是作者自己的学习总结或感悟(linux环境),如有不对,欢迎提出一起探讨!! 目录结构 一.相关知识 二.问题提出 三.处理方法 四.最终结果 一.相关知识 ...