# 使用预定义格式
DateFormat 类允许您以 Locale 敏感的方式使用 预定义样式格式化日期和时间。本节将演示如何使用 DateFormat。
# 日期
格式化日期需要两步:
- getDateInstance:获取格式化程序
- format:传入日期,返回格式化后的字符串
Date today;
String dateOut;
DateFormat dateFormatter;
// 获取格式化程序
dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, currentLocale);
today = new Date();
// 格式化日期
dateOut = dateFormatter.format(today);
System.out.println(dateOut + " " + currentLocale.toString());
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
注意的是:DateFormat 是对 Locale 敏感的,根据传入的 Locale 不同格式化后的表现细节不同
30 juin 2009 fr_FR
30.06.2009 de_DE
Jun 30, 2009 en_US
2020-7-16 zh_CN
1
2
3
4
2
3
4
前面的代码示例指定了默认格式样式。默认样式只是 DateFormat 类提供的预定义格式样式之一,如下所示:
- DEFAULT
- SHORT
- MEDIUM
- LONG
- FULL
下表显示了在美国 Locale 和法国 Locale 在相同预设格式化下的值
Style | 美国 Locale | 法国 Locale |
---|---|---|
DEFAULT | Jun 30, 2009 | 30 juin 2009 |
SHORT | 6/30/09 | 30/06/09 |
MEDIUM | Jun 30, 2009 | 30 juin 2009 |
LONG | June 30, 2009 | 30 juin 2009 |
FULL | Tuesday, June 30, 2009 | mardi 30 juin 2009 |
# 时间
Date 对象表示日期和时间,类似于日期格式化,不同的是获取格式化程序是使用 getTimeInstance
方法
DateFormat timeFormatter =
DateFormat.getTimeInstance(DateFormat.DEFAULT, currentLocale);
1
2
2
下面显示了美国 Locale 和德国 Locale 预定义格式化值
Style | 美国 Locale | 德国 Locale |
---|---|---|
DEFAULT | 7:03:47 AM | 7:03:47 |
SHORT | 7:03 AM | 07:03 |
MEDIUM | 7:03:47 AM | 07:03:07 |
LONG | 7:03:47 AM PDT | 07:03:45 PDT |
FULL | 7:03:47 AM PDT | 7.03 Uhr PDT |
# 日期和时间
将 Date 格式化为日期和时间的完整字符串,使用 getDateTimeInstance
获取格式化程序:
- 第一个参数:是日期样式
- 第二个参数:是时间样式
DateFormat formatter = DateFormat.getDateTimeInstance(
DateFormat.LONG,
DateFormat.LONG,
currentLocale);
1
2
3
4
2
3
4
下表显示了在美国 Locale 和法国 Locale 在相同预设格式化下的值
Style | 美国 Locale | 法国 Locale |
---|---|---|
DEFAULT | Jun 30, 2009 7:03:47 AM | 30 juin 2009 07:03:47 |
SHORT | 6/30/09 7:03 AM | 30/06/09 07:03 |
MEDIUM | Jun 30, 2009 7:03:47 AM | 30 juin 2009 07:03:47 |
LONG | June 30, 2009 7:03:47 AM PDT | 30 juin 2009 07:03:47 PDT |
FULL | Tuesday, June 30, 2009 7:03:47 AM PDT | mardi 30 juin 2009 07 h 03 PDT |
# 完整示例程序
package com.java;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.*;
import java.text.*;
public class DateFormatDemo {
/**
* 格式化日期显示 - 使用默认的日期格式
* @param currentLocale
*/
static public void displayDate(Locale currentLocale) {
Date today;
String dateOut;
DateFormat dateFormatter;
dateFormatter =
DateFormat.getDateInstance(DateFormat.DEFAULT, currentLocale);
today = new Date();
dateOut = dateFormatter.format(today);
System.out.println(dateOut + " " + currentLocale.toString());
}
/**
* 格式化日期显示 - 预定义格式演示
* @param currentLocale
*/
static public void showDateStyles(Locale currentLocale) {
Date today = new Date();
String result;
DateFormat formatter;
int[] styles = {
DateFormat.DEFAULT,
DateFormat.SHORT,
DateFormat.MEDIUM,
DateFormat.LONG,
DateFormat.FULL
};
System.out.println();
System.out.println("Locale: " + currentLocale.toString());
System.out.println();
for (int k = 0; k < styles.length; k++) {
formatter =
DateFormat.getDateInstance(styles[k], currentLocale);
result = formatter.format(today);
System.out.println(result);
}
}
/**
* 格式化时间显示 - 预定义格式演示
* @param currentLocale
*/
static public void showTimeStyles(Locale currentLocale) {
Date today = new Date();
String result;
DateFormat formatter;
int[] styles = {
DateFormat.DEFAULT,
DateFormat.SHORT,
DateFormat.MEDIUM,
DateFormat.LONG,
DateFormat.FULL
};
System.out.println();
System.out.println("Locale: " + currentLocale.toString());
System.out.println();
for (int k = 0; k < styles.length; k++) {
formatter =
DateFormat.getTimeInstance(styles[k], currentLocale);
result = formatter.format(today);
System.out.println(result);
}
}
/**
* 格式化 日期时间 显示 - 预定义格式演示
* @param currentLocale
*/
static public void showBothStyles(Locale currentLocale) {
Date today;
String result;
DateFormat formatter;
int[] styles = {
DateFormat.DEFAULT,
DateFormat.SHORT,
DateFormat.MEDIUM,
DateFormat.LONG,
DateFormat.FULL
};
System.out.println();
System.out.println("Locale: " + currentLocale.toString());
System.out.println();
today = new Date();
for (int k = 0; k < styles.length; k++) {
formatter = DateFormat.getDateTimeInstance(
styles[k], styles[k], currentLocale);
result = formatter.format(today);
System.out.println(result);
}
}
static public void main(String[] args) {
Locale[] locales = {
new Locale("fr", "FR"),
new Locale("de", "DE"),
new Locale("en", "US"),
new Locale("zh", "CN")
};
System.out.println("格式化日期显示 - 使用默认的日期格式");
for (int i = 0; i < locales.length; i++) {
displayDate(locales[i]);
}
System.out.println();
System.out.println("格式化日期显示 - 预定义格式演示");
showDateStyles(new Locale("en", "US"));
showDateStyles(new Locale("fr", "FR"));
System.out.println();
System.out.println("格式化时间显示 - 预定义格式演示");
showTimeStyles(new Locale("en", "US"));
showTimeStyles(new Locale("de", "DE"));
System.out.println();
System.out.println("格式化 日期时间 显示 - 预定义格式演示");
showBothStyles(new Locale("en", "US"));
showBothStyles(new Locale("fr", "FR"));
}
}
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
测试输出
格式化日期显示 - 使用默认的日期格式
16 juil. 2020 fr_FR
16.07.2020 de_DE
Jul 16, 2020 en_US
2020-7-16 zh_CN
格式化日期显示 - 预定义格式演示
Locale: en_US
Jul 16, 2020
7/16/20
Jul 16, 2020
July 16, 2020
Thursday, July 16, 2020
Locale: fr_FR
16 juil. 2020
16/07/20
16 juil. 2020
16 juillet 2020
jeudi 16 juillet 2020
格式化时间显示 - 预定义格式演示
Locale: en_US
7:13:05 PM
7:13 PM
7:13:05 PM
7:13:05 PM CST
7:13:05 PM CST
Locale: de_DE
19:13:05
19:13
19:13:05
19:13:05 CST
19:13 Uhr CST
格式化 日期时间 显示 - 预定义格式演示
Locale: en_US
Jul 16, 2020 7:13:05 PM
7/16/20 7:13 PM
Jul 16, 2020 7:13:05 PM
July 16, 2020 7:13:05 PM CST
Thursday, July 16, 2020 7:13:05 PM CST
Locale: fr_FR
16 juil. 2020 19:13:05
16/07/20 19:13
16 juil. 2020 19:13:05
16 juillet 2020 19:13:05 CST
jeudi 16 juillet 2020 19 h 13 CST
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59