我们可能希望按着某种习惯来输出时间,比如时间的顺序:年 月 星期 日或者年 月 星期 日 小时 分 秒。


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”


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)