格式化-Formatter-DateTimeFormatter

Formatter

格式化说明符

%[argument_index$][flags][width][.precision]conversion

格式说明

  • argument_index$:可选。指定插入内容参数对应在列表中的位置
  • flags:可选。输出显示内容的格式控制。
  • width:可选。非负十进制整数,输出显示内容的宽度控制。
  • .precision:可选。非负十进制整数,对于浮点型数据,表示显示的小数位数;对于字符串数据,表示显示的字符数量。
  • conversion:必选。类型转换字符。

argument_index$

  • 显式索引 是一个十进制整数,用于指示插入参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。可以多次引用任何一个参数。 
  • 普通索引 在格式说明符中不包含参数索引时使用。每个普通索引都分配了一个连续隐式索引,默认按照顺序依次对应。
formatter.format("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s","a", "b", "c", "d")
// -> "d c b a d c b a"

格式控制(flags)

符号作用示例效果
无负号 右对齐 formatter.format("***%8d***", 1000); *** 1000***
有负号“-” 左对齐 formatter.format("***%-8d***", 1000); ***1000 ***
有加号“+” 正数前显示正号
负数前显示负号
formatter.format("***%+8d***", 1000);
formatter.format("***%+8d***", -1000);
*** +1000***
*** -1000***
有空格“ ” 正数前显示空格
负号前显示负号
formatter.format("***% 8d***", 1000);
formatter.format("***% 8d***", -1000);
*** 1000***
*** -1000***
有零“0” 使用0填充剩余位置 formatter.format("***%08d***", 1000); ***00001000***
有逗号“,” 每3位数字添加一个逗号 formatter.format("***%,8d***", 1000); *** 1,000***

如果没有给出 flags,则默认格式设置如下:

  • width 中的输出是右对齐的
  • 负数以 '-' ('\u002d') 开始
  • 正数和零不包括符号或额外的前导空格
  • 不包括组分隔符 

宽度 width

  是将向输出中写入的最少字符数。如果转换值的长度小于宽度,则用 '  ' ( \u0020') 填充输出,直到字符总数等于宽度为止。默认情况下,是在左边进行填充。如果给出 '-' 标志,则在右边进行填充。如果没有指定宽度,则没有最小宽度。  

精度 .precision

  精度是指向输出中写入的最多字符数。精度的应用要先于宽度,因此,即使宽度大于精度,输出也将被截取为 precision 字符。如果没有指定精度,则对字符数没有明确限制。

  一般常用于小数位数的控制,指是小数点分隔符后的位数。如果没有指定精度,则默认精度为 6。例:%.2f 表示格式化后输出小数后两位

类型转换字符 conversion

符号类型示例效果
d 整数型(十进制) formatter.format("%d", 1000); 1000
o 整数型(八进制) formatter.format("%o", 1000); 1750
x 整数型(十六进制) formatter.format("%x", 1000); 3e8
f 浮点型(十进制) formatter.format("%f", 1000.0); 1000.000000
e 浮点型(科学计数) formatter.format("%e", 1000.0); 1.000000e+03
b 布尔型 formatter.format("%b", true); true
c 字符型 formatter.format("%c", ‘A’); A
s 字符串型 formatter.format("%s", “String”); String
% 字符“%” formatter.format("%d%%", 100); 100%

时间类型转换字符

符号类型示例效果
tC 上世纪 formatter.format("%tC", calendar); 20
tY 年(4位) formatter.format("%tY", calendar); 2017
ty 年(2位) formatter.format("%ty", calendar); 17
tm formatter.format("%tm", calendar); 11
tB 月份 formatter.format("%tB", calendar); November
tb 月份缩写 formatter.format("%tb", calendar); Nov
td 日(2位) formatter.format("%td", calendar); 20
te formatter.format("%te", calendar); 20
tA 星期 formatter.format("%tA", calendar); Monday
ta 星期(缩写) formatter.format("%ta", calendar); Mon
tH 小时(24小时制)(2位) formatter.format("%tH", calendar); 18
tk 小时(24小时制) formatter.format("%tk", calendar); 18
tI 小时(12小时制)(2位) formatter.format("%tI", calendar); 06
tl 小时(12小时制) formatter.format("%tl", calendar); 6
tM 分钟 formatter.format("%tM", calendar); 10
tS formatter.format("%tS", calendar); 22
tL 毫秒 formatter.format("%tL", calendar); 490
tN 微秒 formatter.format("%tN", calendar); 570000000
tp 上午/下午 formatter.format("%tp", calendar); pm
tz 时区 formatter.format("%tz", calendar); +0800
tZ 时区(缩写) formatter.format("%tZ", calendar); CST
ts 自1970-01-01 00:00的秒数 formatter.format("%ts", calendar); 1511172687
tQ 自1970-01-01 00:00的毫秒数 formatter.format("%tQ", calendar); 1511172687297
tF YYYY-MM-DD formatter.format("%tF", calendar); 2017-11-20
tD MM/DD/YY formatter.format("%tD", calendar); 11/20/17
tR HH:MM(24小时制) formatter.format("%tR", calendar); 18:11
tT HH:MM:SS(24小时制) formatter.format("%tT", calendar); 18:11:27
tr HH:MM:SS 上午/下午 formatter.format("%tr", calendar); 06:11:27 pm
tc 星期 月 日 HH:MM:SS YYYY formatter.format("%tc", calendar); Mon Nov 20 18:11:27 CST 2017

DateTimeFormatter

  • 模式字母的数量决定了格式。

    文本 :样式是根据所使用的字母数确定的。 少于4个图案字母将使用:短文,通常是缩写 。 完全4个图案字母将使用:全文,通常是完整的描述 。 完全5个图案字母将使用:缩小的文字,通常是单个字母。 图案字母'L','c'和'q'指定文本样式的形式。

    编号 :如果字母数为1,则使用最小位数输出该值,而不填充。 否则,使用数字计数作为输出字段的宽度,根据需要使用零填充值。 字母对字母数量的约束, 只能指定'c'和'F'为一个字母。 可以指定为两个的'd','H','h','K','k','m'和's'的字母。 最多可以指定三个字母'D'。

    分数 :纳秒值有九位数,因此字母的计数从1到9位.如果小于9,那么纳秒值将被截断,只有最高有效位被输出。 在严格模式下解析时,解析数字的数量必须与模式字母的数量相匹配。 当在宽松模式下解析时,解析数字的数目必须至少为指定模式字母数,最多9位数。

    年份 :指定字母数使用那个字段宽度填充。 如果字母数为2,则使用一个两位数的形式。 对于打印,这将输出最右边的两位数字。 对于解析,这将使用基数值2000解析,即在2000到2099之间的范围内。 如果字母数小于四(但不是两个),则符号输出为负数。或者将始终输出“ - ”号

    ZoneId :输出时区ID,如“Europe / Paris”。 如果字母数为2,则输出时区ID。 任何其他字母数字抛出IllegalArgumentException

    区域名称 :输出时区ID的显示名称。 如果字母数为1,2或3,则输出短名称。 如果字母数为4,则输出全名。 五个或更多的字母抛出IllegalArgumentException

  Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   G       era                         text              AD; Anno Domini; A
   u       year                        year              2004; 04
   y       year-of-era                 year              2004; 04
   D       day-of-year                 number            189
   M/L     month-of-year               number/text       7; 07; Jul; July; J
   d       day-of-month                number            10

   Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
   Y       week-based-year             year              1996; 96
   w       week-of-week-based-year     number            27
   W       week-of-month               number            4
   E       day-of-week                 text              Tue; Tuesday; T
   e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
   F       week-of-month               number            3

   a       am-pm-of-day                text              PM
   h       clock-hour-of-am-pm (1-12)  number            12
   K       hour-of-am-pm (0-11)        number            0
   k       clock-hour-of-am-pm (1-24)  number            0

   H       hour-of-day (0-23)          number            0
   m       minute-of-hour              number            30
   s       second-of-minute            number            55
   S       fraction-of-second          fraction          978
   A       milli-of-day                number            1234
   n       nano-of-second              number            987654321
   N       nano-of-day                 number            1234000000

   V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
   z       time-zone name              zone-name         Pacific Standard Time; PST
   O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
   X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
   x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
   Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

   p       pad next                    pad modifier      1

   '       escape for text             delimiter
   ''      single quote                literal           '
   [       optional section start
   ]       optional section end
   #       reserved for future use
   {       reserved for future use
   }       reserved for future use 

 

posted @ 2020-02-04 00:33  远离颠倒梦想  阅读(814)  评论(0)    收藏  举报