文章目录

  • 1. 前言
  • 2. 格式化标准(格式字符标识)
  • 3. 使用注意事项
  • 3.1 格式字符数量控制显示位数
  • 3.2 格式化输出包含标识占位符的输入出


1. 前言

    系统时间,需要通过格式化输出才能展示给用户,根据不同地区用户习惯的不一样,展示的方式也有所差别,但是有一个统一的格式化标准,可以满足各种格式化输出的需求。

2. 格式化标准(格式字符标识)

格式化标识

说明

备注

y


如果不被支持,将会输出默认值格式

M


一年中的月

d


一个月中的日

h


12小时制

H


24小时制

s


-

S

毫秒

-

a

上午/下午

-

E

星期几

-

D

第几天

一年中的第几天

F

月内第几天

在月份内的第几天

w

年内第几星期

在一年内的第几个星期

W

月内第几星期

在月份内的第几个星期

k


12小时制,同h类似

K


24小时制,同H类似

z

时区

-

3. 使用注意事项

3.1 格式字符数量控制显示位数

    格式字符的数量控制输出位数,超出最大位数前面补0,如果设置的位数不被支持,将会使用系统默认的格式输出。

  • 示例
fun main(args: Array<String>) = runBlocking {
    println(SimpleDateFormat("yy年M月d日 HH时mm分ss秒").format(Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 200L)))
    println(SimpleDateFormat("yyy年M月d日 HH时mm分ss秒").format(Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 200L)))
    println(SimpleDateFormat("yyyy年M月d日 HH时mm分ss秒").format(Date()))
    println(SimpleDateFormat("yyyyy年MM月dd日 HH时mm分ss秒").format(Date()))
}
  • 输出
19年5月31日 12时00分53秒
2019年5月31日 12时00分53秒
2019年12月17日 12时00分53秒
02019年12月17日 12时00分53秒

    从上面的例子可以看到,年份格式为yy,输出两位年份;当年份格式为yyy,不支持,输出系统默认格式(当前年份的全部);当年份格式为yyyyy,超出了当前年份的位数,将在前面补0;月份格式为M,当月份为个位数时显示一位,当月份为两位时显示两位;月份格式为MM,无论如何都显示两位,不足前面补0;其他字段也是类似的规则。

3.2 格式化输出包含标识占位符的输入出

&nbps;&nbps;&nbps;&nbps;如果在你格式化之后的字符串中,包含了标识符占位符,可以使用单引号''将字符括起来,这样格式化输出时将会当做普通字符输出。

  • 示例
println(SimpleDateFormat("yyyy/MM/dd HH:mm:ss's'").format(Date()))
  • 输出
2019/12/17 14:39:31s