Java中随心所欲格式化时间(快刀斩乱麻)

YJava中随心所欲格式化时间(快刀斩乱麻)

最近在南航电子商务公司做feinar的项目的后期功能中的PNR(Pessenger Name Record)的解析,由于要使用中航信的IBE开发包,里面的日期形式千奇百怪的,几乎你想的到的格式都有,很是恼火,最后,经过查找资料,翻阅文档,以及跟项目团队的同事们讨论,总结了java中各种日期的格式化的方法。

经过实践中的对比,我们选择了SimpleDateFormat这个类来解决我们的时间格式问题。

SimpleDateFormat 是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式.

日期和时间模式

日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 'A''Z''a''z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''" 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。

定义了以下模式字母(所有其他字符 'A''Z''a''z' 都被保留):

字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800

以下示例显示了如何在美国语言环境中解释日期和时间模式。给定的日期和时间为美国太平洋时区的本地时间 2001-07-04 12:08:56

日期和时间模式 结果
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700

 

 

 

 

 

 

 

SimpleDateFormat 在编程中的实际应用实例:

(一)格式化(日期 -> 文本)

一般地,中文中常用的  日期 时间如:20070719 20:29:30
SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd hh:mm:ss");
  System.out.println("Date to String "+formater.format(new Date()));

相近的常用形式还有 yyMMdd hh:mm:ss  yyyy-MM-dd hh:mm:ss  dd-MM-yyyy hh:mm:ss
但是值得注意是:这种格式(19JUL07 )及其相近的形式,就有点小技巧  19JUL07
SimpleDateFormat formater = new SimpleDateFormat("ddMMMyy",,new Locale("US"))
System.out.println("Date to String "+formater.format(new Date()).toUpperCase());
由于是英文的所以应该使用 Locale 对象参数,否则就使用的是默认本地 Locale 。

(二)分析(文本 -> 日期)

一般地,想要什么要的格式的时间就就使用什么形式的日期时间模式和文本参数,例如 2007-7-19 则返回一个java.util.Date型的时间对象,时分秒都补0

 formater  =   new  SimpleDateFormat( " yyyyMMMdd " , new  Locale( " US " ));
  
try   {
   System.out.println(
"String to Date "+formater.parse("2007sep01"));
  }
  catch  (ParseException e)  {
   e.printStackTrace();
  }

 特别地,

 

 formater  =   new  SimpleDateFormat( " yyyyMMMdd " , new  Locale( " US " ));
  
try   {
   System.out.println(
"String to Date "+formater.parse("2007sep01"));
  }
  catch  (ParseException e)  {
   e.printStackTrace();
  }

它也返回一个java.util.Date型的日期对象,时分秒都补0

(三)文本 - > Timestamp  、日期 -> Timestamp

 

Timestamp t ;
  SimpleDateFormat format 
=   new  SimpleDateFormat( " yyyy-MM-dd hh:mm:ss " );
  
try   {
   t 
= new Timestamp(format.parse("2007-07-19 00:00:00").getTime());
  }
  catch  (ParseException e)  {
   e.printStackTrace();
  }


 Timestamp t ;
  SimpleDateFormat format 
=   new  SimpleDateFormat( " yyyy-MM-dd hh:mm:ss " );
  t 
=   new  Timestamp( new  Date().getTime());

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值