注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

分享,态度 ·~~

—— 十年太长,五年;如果可以回到五年前,你最想对那时候的自己说什么?

 
 
 

日志

 
 

A guide to Android SimpleDateFormat in examples  

2011-02-14 21:38:36|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Today I want to show you some examples of how you can use SimpleDateFormatclass in your code. I hope some of them will be new and surprising!

The basic example

First the most basic usage of the class. Lets use it to format Date object into a simple string showing day, month and a year:

1: 2: 3: 4: 5: 6:
SimpleDateFormat simpleDateFormat =         new SimpleDateFormat("dd/MM/yy"); String dateAsString = simpleDateFormat.format(new Date());  System.out.println(dateAsString); // Result: "12/11/09" 

Slightly more advanced

Obviously we can use more complicated patterns than that (see SimpleDateFormatJavaDoc for the full list). Besides adding more data to be shown we can also add some regular text – to do that in a pattern you need to escape the text with an apostrophe. So here is a fancy way of printing the time and date:

1: 2: 3: 4: 5: 6:
SimpleDateFormat simpleDateFormat =         new SimpleDateFormat("hh:mm 'o''clock on' MMMM dd yyyy"); String dateAsString = simpleDateFormat.format(new Date());  System.out.println(dateAsString); // Result: "06:49 o'clock on November 12 2009" 

Now with Locale

SimpleDateFormat is Locale dependent, so by providing one you can get the Date string localized for specific language or country. This is a date in French:

1: 2: 3: 4: 5: 6:
SimpleDateFormat simpleDateFormat =         new SimpleDateFormat("dd MMMM yyyy zzzz G", Locale.FRENCH); String dateAsString = simpleDateFormat.format(new Date());  System.out.println(dateAsString); // Result: "12 novembre 2009 Heure du méridien de Greenwich ap. J.-C." 

Parse String to Date

Good thing about the SimpleDateFormat class is that it can be used not only for formatting, but also for parsing string into a Date object. In this example the used pattern is exactly the same as used by Date.toString() method. With it we can parse the strings created by Data.toString() back into dates:

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
// SimpleDateFormat that works exactly like Date.toString() SimpleDateFormat simpleDateFormat =         new SimpleDateFormat("E MMM dd HH:mm:ss zzz yyyy", Locale.ROOT); Date today = new Date();  String dateAsString_format = simpleDateFormat.format(today); String dateAsString_native = today.toString(); // Both strings are: "Thu Nov 12 18:49:36 GMT 2009"  Date parsedDate = simpleDateFormat.parse(dateAsString_native); System.out.println(parsedDate.toString()); // Result: "Thu Nov 12 18:49:36 GMT 2009" 

Setting the default time zone

Notice that when you parse a string into a Date the result may be ambiguous. For example the string “11:23 1 Jan 2001″ is a different moment in time depending whether you live in Japan or Canada. By default Java resolves this by using your local time zone obtained from the default Locale.

Since the time zone may not be a part of the parsed string you may want to set it manually instead using the default one. You can do this with setTimeZone() method:

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
SimpleDateFormat simpleDateFormat =         new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH); Date date = simpleDateFormat.parse("13-07-1999"); System.out.println(date); // Result: "Tue Jul 13 00:00:00 GMT 1999"  simpleDateFormat.setTimeZone(TimeZone.getTimeZone("PST")); date = simpleDateFormat.parse("13-07-1999"); System.out.println(date); // Result: "Tue Jul 13 08:00:00 GMT 1999" 

Setting the century

Similar ambiguity occurs when parsing two-digit year dates. Whether “01/01/59″ is the new year’s day of 1959 or 2059 can be set by specifying the century to the SimpleDateFormat object. To be specific with set2DigitYearStart() method you can specify the 100 year period in which the parsed date will be placed. By default the 100 year period is [today - 80 years, today + 20 years]. See the example:

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
SimpleDateFormat simpleDateFormat =         new SimpleDateFormat("dd MMMM yy", Locale.ENGLISH); Date date = simpleDateFormat.parse("1 November 45"); System.out.println(date); // By default the year 45 will be taken from period 1929 - 2029 // Result: "Thu Nov 01 00:00:00 GMT 1945"  Date startOf19thCentury = new GregorianCalendar(1801,1,1).getTime(); Date startOf21stCentury = new GregorianCalendar(2001,1,1).getTime();  simpleDateFormat.set2DigitYearStart(startOf19thCentury); date = simpleDateFormat.parse("1 November 45"); System.out.println(date); // After invoking set2DigitYearStart() the period is now 1801 - 1901 // Result: "Thu Nov 01 00:00:00 GMT 1845"  simpleDateFormat.set2DigitYearStart(startOf21stCentury); date = simpleDateFormat.parse("1 November 45"); System.out.println(date); // This time the period is 2001 - 2101 // Result: "Thu Nov 01 00:00:00 GMT 2045" 

Make the parsing more strict

By default the parse method of SimpleDateFormat is very forgiving. If the provided string is not entirely compatible with the pattern, SimpleDateFormat instead of giving up tries with many tricky heuristics to guess what would be the correct answer. In many situations this behavior is more than welcome, but if you do not like this you can disable it. With setLenient() method you can make the parsing obey exactly the pattern and throw an exception if string is invalid.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
SimpleDateFormat simpleDateFormat =         new SimpleDateFormat("dd MMMM yyyy", Locale.ENGLISH); Date date = simpleDateFormat.parse("31 April 1999"); System.out.println(date); // Since April has only 30 days the parser will assume // user meant April 30th + one day = May 1st // Result: "Sat May 01 00:00:00 GMT 1999"  // Make the parsing more strict simpleDateFormat.setLenient(false); // This throws java.text.ParseException: Unparseable date: "31 April 1999" date = simpleDateFormat.parse("31 April 1999");
【from JavaBlogging http://www.javablogging.com/java-simpledateformat-examples/】
  评论这张
 
阅读(2263)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017