文章开始前,我们先来看一小段代码,这段代码能正常运行吗?
1 package simpledate;
2
3 import java.text.ParseException;
4 import java.text.SimpleDateFormat;
5 import java.util.Date;
6
7 public class Format {
8
9 public static void main(String[] args) throws ParseException {
10 String date = "2012-12-12";
11 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
12 Date end = simpleDateFormat.parse(date.trim());
13
14 }
15
16 }答案是否定的,这段代码将报java.text.ParseException错误,这是我昨天在项目中遇到的一个小问题,让我们看完下面的讲解再来回头看为什么会出现这个错误
2 parse()和format()
2.1 字符串转为日期用parse方法
parse()的简单使用如下
1) 构造一个SimpleDateFormat对象,构造的时候传入的参数'yyyy-MM-dd'代表'2013-01-01'这种日期格式
2) 持有一个待转的字符串
3) 使用SimpleDateFormat的parse()方法
1 public static void main(String[] args) throws ParseException {
2 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
3 String s = "2013-01-01";
4 Date date = simpleDateFormat.parse(s);
5 }2.2 日期转为字符串用format方法
format()的简单使用如下
1) 构造一个SimpleDateFormat对象,构造的时候传入的参数'yyyy-MM-dd'代表'2013-01-01'这种日期格式
2) 持有一个待转的日期对象
3) 使用SimpleDateFormat的format()方法
1 public static void main(String[] args) throws ParseException {
2 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
3 Date date = new Date();
4 String s = simpleDateFormat.format(date);
5 }3 构造SimpleDateFormat时的参数Pattern
Pattern的中文意思为模式、样品,这里我们可以为理解为日期的规定模板
这样我们就很好的理解了前言部分的代码为什么会出错了,因为它在使用parse()转换的时候没按常理出牌,待转换的String对象和规定的模板完全不同
那么Pattern应该如何规定了?Java API给出了以下规范
Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
Examples那一栏即为示例值(美国标准),Java API还给出了一些日期和字符串之间的示例,不过也是美国标准
本文详细解析了Java中日期格式化错误的原因,并提供了正确的使用方式,包括parse()和format()方法的使用规范及Pattern参数的重要性。
3925

被折叠的 条评论
为什么被折叠?



