解析特殊locale的日期格式
还是在工作中遇到的问题,一般是在UI上提供日期Widget,让用户去选日期,一般的逻辑是DateFormatter的short日期模式。然而在UI上,有些locale的格式(比如Polish)是Medium格式:yyyy/mm/dd,但是Polish locale的Short日期模式是dd/mm/yy。
对java.text.DateFormat.parse(String source, ParsePosition pos)而言,默认的解析是宽大的:即使用户输入的日期不是以对象要求的格式输入,也能够解析为日期,然后解析会成功。
但是对于特殊的locale,比如Polish,鉴于format不一致(yyyy/mm/dd vs dd/mm/yy),一个Medium模式的字符串不能使用Dateformat对象的Short日期模式去解析,如果试图去解析的话,会抛出异常。
解决方法:当使用Short模式解析不成功的话,使用Medium模式去解析。
package tools; import java.text.DateFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; public class MedeiumAndShortDateFormalForAllLocale { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<Locale> allLocale = new ArrayList<Locale>(); System.out.println(System.getProperty("java.version")); Locale[] locales = Locale.getAvailableLocales(); allLocale = Arrays.asList(locales); Date date = new Date(); DateFormat df = null; String strDate = DateFormat.getDateInstance(DateFormat.SHORT).format(date); System.out.println(strDate); for(Locale locale : allLocale){ if(locale != null){ df = DateFormat.getDateInstance(DateFormat.SHORT, locale); } try { date = df.parse(strDate); } catch (ParseException e) { // TODO Auto-generated catch block System.out.println("Error in parsing locale with Short: " + locale + "==>" + locale.getDisplayCountry()); df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale); try { date = df.parse(strDate); } catch (ParseException e1) { // TODO Auto-generated catch block System.out.println("Error in parsing locale with Medium: " + locale + "==>" + locale.getDisplayCountry()); e1.printStackTrace(); } e.printStackTrace(); } // DateFormat mediumFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale); System.out.println("Medium Fromat for Today: " + locale + "=>" + locale.getCountry() + "=>" + locale.getDisplayCountry() + "=>" + df.format(date)); } } }
作者:Shane
出处:http://bluescorpio.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://bluescorpio.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。