我们可能希望按着某种习惯来输出时间,比如时间的顺序:年 月 星期 日或者年 月 星期 日 小时 分 秒。
Java早期使用java.text包中的DateFormat的子类SimpleDateFormat来实现日期的格式化,JDK 1.5版本提供了更为方便的Formatter类,Formatter类的format方法格式如下:
format(格式化模式,日期列表)
按着“格式化模式”返回“日期列表”中所列各个日期中所含数据(年,月,日,小时等数据)的字符串表示。
目前,Java已经将format方法作为了String类的静态方法,因此,程序可以直接使用String类调用format方法对日期进行格式化。
1.格式化模式
format方法中的“格式化模式”是一个用双引号括起的字符序列,也就是字符串,该字符序列中的字符由时间格式符和普通字符所构成。
例如:"日期:%ty-%tm-%td"中的%ty,%tm和%td等都是时间格式符,开始的2个汉字(“日”和“期”)、冒号、格式符之间的连接字符“-”都是普通字符,通俗点说就是,不是时间格式符的都被认为是普通字符。
比如:格式符%ty、%tm和%td将分别表示日期中的“年”、“月”和“日”。
format方法返回的字符串就是“格式化模式”中的时间格式符被替换为它得到的格式化结果后的字符串,例如:
String s = String.format("%tY年%tm月%td日",new Date(),new Date(),new Date());
2.日期列表
format方法中的“日期列表”可以是用逗号分隔的Calendar对象或Date对象。
我们要保证format方法“格式化模式”中的格式符的个数与“日期列表”中列出的日期个数相同。
format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式“日期列表”中对应的日期,而“格式化模式”中的普通字符保留原样。
3.格式化同一日期
我们希望用几个格式符号格式“日期列表”中的同一个日期,可以在“格式化模式”中使用“<”,比如:"%ty-%<tm-%<td"中的三个格式符将格式化同一日期,即含有“<”的格式符和它前面的格式符格式同一个日期,例如:
String s = String.format("%ty年%<tm月%<td日",new Date());
常用的日期格式符:
日期格式符 | 作用 |
%tY | 将日期中的“年”格式化为4位形式,例如:2000 |
%ty | 将日期中的“年”格式化为2位形式,带前导零,例如:01 |
%tm | 将日期中的“月”格式化为2位形式,带前导零,即01~13,其中“01”是一年的第一个月,“13”是支持阴历所需的一个特殊值 |
%tp | 将日期中的“日”格式化为当前环境下上午或下午的表示格式,例如:am或pm |
%td | 将日期中的“日”格式化为当前月中的天,带前导零,即01~31,其中“01”是一个月的第一天 |
%tj | 将日期中的“日”格式化为当年的天数,带前导零,即001~365,“001”是一年的第一天 |
%tB | 将日期中的“月”格式化为当前环境下的月份全称,例如:January |
%tb | 将日期中的“月”格式化为当前环境下的月份简称,例如:Jan |
%tA | 将日期中的“日”格式化为当前环境下的星期几的全称,例如:Monday |
%ta | 将日期中的“日”格式化为当前环境下的星期几的简称,例如:Mon |
%tH | 将日期中的“时”格式化为2位形式,带前导零,24小时制,即00~23 |
%tI | 将日期中的“时”格式化为2位形式,带前导零,12小时制,即01~12 |
%tM | 将日期中的“分”格式化为2位形式,带前导零,即00~60,60是支持闰秒所需的一个特殊值 |
%tS | 将日期中的“秒”格式化为2位形式,带前导零,即00~60 |
%tL | 将日期中秒的“毫秒”格式化为3位形式,带前导零,即000~999 |
%tN | 将日期中毫秒的“微秒”格式化为9位形式,带前导零,即000000000~999999999 |
%tz | 将日期与GMT(格林威治时间)的偏移量格式化为4位形式,例如:+0800 |
%tZ | 将日期所在时区的名称格式化为标准缩写,例如:CST |
%tR | 等价于%tH:%tM |
%tT | 等价于%tH:%tM:%S |
%tr | 等价于%tI:%tM:%tS%Tp(上午或下午标记%Tp的位置可能与地区有关) |
%tD | 等价于%tm/%td/%ty |
%tF | 等价于"%tY-%tm-%td" |
%tc | 等价于"%ta %tb %td %tT %tZ %tY",例如:“星期日 二月 12 20:02:32 CST 2012” |
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程