• 解析特殊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)); 
            }
        }
    }
  • 相关阅读:
    [iOS]delegate和protocol
    Objective-c中@interface、@implementation、@protocal
    iOS应用的真机调试
    2016最新Java笔试题集锦
    Java面试题相关内容
    JSP面试题及答案
    JAVA面试题相关基础知识
    mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI
    Java中equals和==的区别
    java的Arrays类的应用
  • 原文地址:https://www.cnblogs.com/bluescorpio/p/2957698.html
Copyright © 2020-2023  润新知