Java的SimpleDateFormat浅析

本文详细解析了Java中日期格式化错误的原因,并提供了正确的使用方式,包括parse()和format()方法的使用规范及Pattern参数的重要性。

文章开始前,我们先来看一小段代码,这段代码能正常运行吗?


 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还给出了一些日期和字符串之间的示例,不过也是美国标准

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值