zoukankan      html  css  js  c++  java
  • 解析特殊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)); 
            }
        }
    }
  • 相关阅读:
    主线程 Looper.loop() 死循环为何不会ANR
    AIDL实例
    AIDL 的工作原理
    Flutter文本框TextField
    原理
    linux安装mysql可视化界面
    MySQL Workbench gnome-keyring-daemon错误的解决
    linux安装mysql以及修改密码和重启mysql等相关命令
    linux安装vlc视频播放器
    centos调整屏幕亮度
  • 原文地址:https://www.cnblogs.com/bluescorpio/p/2957698.html
Copyright © 2011-2022 走看看