日期格式化
定义:使时间按照特定模式输出
学习该章节之前需要学习Java的时间相关的类的相关知识(链接: Java中时间相关的类和方法详解)
1.format()方法(属于String的一个类方法)
String format(格式化模式,时间数据列表);
该方法返回一个String对象,其实体是“时间数据列表”按照"格式化模式"排列的字符序列。
”格式化模式“是一个用双引号括起来的字符序列,该字符序列中的字符由时间格式符和普通字符所构成。例如:
"日期:%ty-%tm-%td"
-
时间格式符是一种代表指定格式的某种时间信息的符号,如:“%ty”、“%tm”。其中"%tm"就是代表二位形式的几月,如;01、02、03……11、12
-
普通字符指时间格式符除外的所有字符,如:“日”、“期”、“:”、“-”。这些字符虽然和日期的表达有关,如”日“和”期“两个字,但是却并没有具体的时间信息如;1月2日。这种不包含具体时间信息的字符就是普通字符。
示例:
LocalDate date=LocalDate.now(); String s=String.format("%tY年%tm月%td日",date,date,date);
假设当前日期是2024-5-12,那么s的实体就是"2022年02月17日"
注意
要保证,format()方法中”格式化模式“中的时间格式符的个数与”日期列表“中列出的日期个数相同。可以像例子中一样,使用逗号分隔的LocalDate对象,默认按照从左到右,使用“格式化模式”中的时间格式符来格式化“日期列表”中对应的时间对象,而普通字符保留原样。
如果希望多个时间格式符的数据都从一个时间对象中获得,可以在“格式化模式”中使用"<“,比如,”%ty-%<tm-%<td"中的3个时间格式符将会格式化同一个日期,即含有"<"的格式符将会和它前面的时间格式符一起格式化同一个日期。
String s=String.format("%ty年%<tm月%<td日",date);
//这样三个时间格式符就可以使用一个时间对象了
时间格式符
常用时间格式符 | 含义 |
---|---|
%tY | 4位形式的第几年,如1999、0012、2021(带前导零) |
%ty | 两位形式的第几年,如99、02(带前导零) |
%tm | 两位形式的第几月,如01、11(带前导零) |
%td | 两位形式的当月的第几天,01-31(带前导零) |
%tB | 当前环境下的第几月的全称,如US环境下,“January” |
%tb | 当前环境下的第几月的简称,如US环境下,“Jan”、“Feb” |
%tA | 当前环境下的星期几的全称,如"Sunday" |
%ta | 当前环境下的星期几的简称,如"Sun"、“Mon” |
%tH | 两位形式,24小时制的第几小时,00-23(带前导零) |
%tI | 两位形式,12小时制的第几小时,1-12 |
%tM | 两位形式的第几分钟,00-60(带前导零) |
%tS | 两位形式的第几秒,00-60(带前导零) |
%tN | 九位形式的第几纳秒,000000000-999999999(带前导零) |
%tp | 当前地区的时间是上午还是下午,如在中国," 上午" |
特殊时间格式符 | 代表几个日期格式符组合在一起 |
%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” ("%tZ"好像不是时间格式符,会报错) |
获取特定地区的星期格式
不同区域的星期表示方法不同。如,星期四在美国用Thu(Thursday)作为简称(全称),在日本用”木“(木曜日)作为简称(全称)。
可以使用format()方法的一个重载方法,指定特定地区的星期格式
String format(Locale locale,格式化模式,日期列表);
locale是Locale类的对象,用于表示地域。
Locale类的Static常量都是Locale对象。如:Locale.US表示美国,(US就是Locale的一个Static常量)Locale.JAPAN表示日本。
String s=String.format(Locale.US,"%tA",date);
//若date中的数据是星期四,那么s="Thursday"
如果不设置特定地区,那么locale会读取系统的地区设置。如在中国,locale=Locale.CHINA