且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Java格式化Date为字符串的高级写法

更新时间:2021-10-21 22:15:23

    本文使用printf来进行格式化日期,不仅不需要创建DateFormat实例,又可以简化代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private static void testDate() {
System.out.printf("%tc\n",new Date()); // Wed Jan 13 18:51:28 CST 2016 (完整的日期和时间)
/** 经常使用 **/
System.out.printf("%tF\n",new Date()); // 2016-01-13 (ISO 8061日期)
System.out.printf("%tD\n",new Date()); // 01/13/16 (美国格式的日期)
/** 经常使用 **/
System.out.printf("%tT\n",new Date()); // 18:51:28 (24小时时间)
System.out.printf("%tr\n",new Date()); // 06:51:28 PM (12小时时间)
System.out.printf("%tR\n",new Date()); // 18:51 (24小时时间没有秒)
System.out.printf("%tY\n",new Date()); // 2016 (4位数字的年(前面补0))
System.out.printf("%ty\n",new Date()); // 16 (年的后两位数字(前面补0))
System.out.printf("%tC\n",new Date()); // 20 (年的前两位数字(前面补0))
System.out.printf("%tb\n",new Date()); // Jan (月的缩写)
System.out.printf("%tB\n",new Date());
System.out.printf("%tm\n",new Date()); // 01 (两位数字的月(前面补0))
System.out.printf("%td\n",new Date()); // 13 (两位数字的日(前面补0))
System.out.printf("%te\n",new Date()); // 13 (两位数字的日(前面不补0))
System.out.printf("%tA\n",new Date()); // Wednesday (星期几的完整拼写)
System.out.printf("%ta\n",new Date()); // Wed (星期几的缩写)
System.out.printf("%tj\n",new Date()); // 013 (三位数的年中的日子(前面补0),在001到366之间)
System.out.printf("%tH\n",new Date()); // 18 (两位数字的小时(前面补0),在0到23之间)
System.out.printf("%tk\n",new Date()); // 18 (两位数字的小时(前面不补0)在0到23之间)
System.out.printf("%tI\n",new Date()); // 06 (两位数字的小时(前面补0),在0到12之间)
System.out.printf("%tl\n",new Date()); // 6 (两位数字的小时(前面不补0),在0到12之间)
System.out.printf("%tM\n",new Date()); // 51 (两位数字的分钟(前面补0))
System.out.printf("%tS\n",new Date()); // 28 (两位数字的秒(前面补0))
System.out.printf("%tL\n",new Date()); // 886 (三位数字的毫秒(前面补0))
System.out.printf("%tN\n",new Date()); // 886000000 (九位数字的毫微秒(前面补0))
System.out.printf("%tp\n",new Date()); // pm (上午或者下午的小写标志)
// System.out.printf("%tP\n",new Date());//此方法报错 应该和时区有关系
System.out.printf("%tz\n",new Date()); // +0800 (从GMT起,RFC822数字移位)
System.out.printf("%tZ\n",new Date()); // CST (时区)
System.out.printf("%ts\n",new Date()); // 1452682288 (从格林威治时间1970-01-01 00:00:00起的秒数)
System.out.printf("%tQ\n",new Date()); // 1452682288886 (从格林威治时间1970-01-01 00:00:01起的毫秒数)

/** 高级输出时间格式 **/
String fullDate = String.format("%1$s%2$tY-%2$tm-%2$td %2$tT", "Due Date: ", new Date()); //Due Date: 2016-01-13 16:45:21
String fullDate2 = String.format("%s%tY-%<tm-%<td %<tT", "Due Date: ", new Date()); //Due Date: 2016-01-13 16:45:21
String fullDate3 = String.format("%s%tF %<tT", "Due Date: ", new Date()); //Due Date: 2016-01-13 16:45:21
System.out.println(fullDate);
System.out.println(fullDate2);
System.out.println(fullDate3);
}

如果参数超过一个,那就必须在 % 后面指定参数的索引,并以 $ 终止。

还可以使用 < 标志, 这样就不用使用索引来指定位置了。

是不是很方便呢?