日期格式化类
DateFormat格式化日期
- getDateInstance:返回一个日期格式器,它格式化的字符串只有日期,没有时间。该方法可以传入多个参数,用于指定日期样式和Locale等参数。如果不指定这些参数,则使用默认参数。
- getTimeInstance:返回一个时间格式器,它格式化的字符串只有时间,没有日期。该方法可以传入多个参数,用于指定时间样式和Locale等参数。如果不指定这些参数,则使用默认参数。
- getDateTimeInstance:返回一个日期、时间格式器,它格式化的字符串既有日期,又有时间。该方法可以传入多个参数,用于指定日期样式、时间样式和Locale等参数。如果不指定这些参数,则使用默认参数。
简单的DateFormat格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的ASCII字母被保留为模式字母,定义如下:
字母 |
描述 |
示例 |
G |
纪元标记 |
AD |
y |
四位年份 |
2019 |
M |
月份 |
July or 07 |
d |
一个月的日期 |
10 |
h |
A.M./P.M. (1~12)格式小时 |
12 |
H |
一天中的小时 (0~23) |
22 |
m |
分钟数 |
30 |
s |
秒数 |
55 |
S |
微妙数 |
234 |
E |
星期几 |
Tuesday |
D |
一年中的日子 |
360 |
F |
一个月中第几周的周几 |
2 (second Wed. in July) |
w |
一年中第几周 |
40 |
W |
一个月中第几周 |
1 |
a |
A.M./P.M. 标记 |
PM |
k |
一天中的小时(1~24) |
24 |
K |
A.M./P.M. (0~11)格式小时 |
10 |
z |
时区 |
Eastern Standard Time |
' |
文字定界符 |
Delimiter |
" |
单引号 |
` |
SimpleDateFormat格式化日期
SimpleDateFormat是DateFormat的子类,它可以非常灵活地格式化Date,也可用于解析各种格式的日期字符串。创建SimpleDateFormat对象时需要传入一个pattern字符串,这个pattern不是正则表达式,而是一个日期模板字符串。
import java.util.*;
import java.text.*;
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy-MM-dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(date));
}
}
以上实例编译运行结果如下:
Current Date: 星期五 2019-11-22 at 09:28:10 下午 CST
使用printf格式化日期
printf方法可以很轻松地格式化时间和日期。使用两个字母格式,它以t开头并且以下面表格中的一个字母结尾。例如:
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
}
以上实例编译运行结果如下:
Current Date/Time : 星期五 十一月 22 21:40:38 CST 2019
如果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了。因此,可以利用一个格式化字符串指出要被格式化的参数的索引。
索引必须紧跟在%后面,而且必须以$结束。例如:
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
以上实例编译运行结果如下:
Due date: 十一月 22, 2019
或者,你可以使用<标志。它表明先前被格式化的参数要被再次使用。例如:
public class DateFormatDemo{
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 显示格式化时间
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
以上实例编译运行结果如下:
Due date: 十一月 22, 2019
日期和时间转换字符
字符 |
描述 |
例子 |
c |
完整的日期和时间 |
Mon May 04 09:51:52 CDT 2009 |
F |
ISO 8601 格式日期 |
2004-02-09 |
D |
U.S. 格式日期 (月/日/年) |
02/09/2004 |
T |
24小时时间 |
18:05:19 |
r |
12小时时间 |
06:05:19 pm |
R |
24小时时间,不包含秒 |
18:05 |
Y |
4位年份(包含前导0) |
2004 |
y |
年份后2位(包含前导0) |
04 |
C |
年份前2位(包含前导0) |
20 |
B |
月份全称 |
February |
b |
月份简称 |
Feb |
n |
2位月份(包含前导0) |
02 |
d |
2位日子(包含前导0) |
03 |
e |
2位日子(不包含前导0) |
9 |
A |
星期全称 |
Monday |
a |
星期简称 |
Mon |
j |
3位年份(包含前导0) |
069 |
H |
2位小时(包含前导0), 00 到 23 |
18 |
k |
2位小时(不包含前导0), 0 到 23 |
18 |
I |
2位小时(包含前导0), 01 到 12 |
06 |
l |
2位小时(不包含前导0), 1 到 12 |
6 |
M |
2位分钟(包含前导0) |
05 |
S |
2位秒数(包含前导0) |
19 |
L |
3位毫秒(包含前导0) |
047 |
N |
9位纳秒(包含前导0) |
047000000 |
P |
大写上下午标志 |
PM |
p |
小写上下午标志 |
pm |
z |
从GMT的RFC 822数字偏移 |
-0800 |
Z |
时区 |
PST |
s |
自 1970-01-01 00:00:00 GMT的秒数 |
1078884319 |
Q |
自 1970-01-01 00:00:00 GMT的毫妙 |
1078884319047 |
还有其他有用的日期和时间相关的类。对于更多的细节,你可以参考到Java标准文档。
解析字符串为时间
SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:
public class DateFormatDemo{
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input ="2019-11-23";
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
以上实例编译运行结果如下:
Sat Nov 23 00:00:00 CST 2019
小弟才疏学浅,如有不当之处,还请多多指教
参考:
上一篇: 日期格式化
下一篇: js金额标准格式化(可指定精确小数位)