袁艺

个人站

欢迎来到我的个人站~


使用DateFormat需设置语言环境

转载

使用DateFormat需设置语言环境

先看段代码:

String sDate = "2014-12-20";
try {
    DateFormat df = DateFormat.getDateInstance();
    Date date = df.parse(sDate);
} catch (Exception e) {
    e.printStackTrace();
}

这段代码在中文语言环境下是可以测试通过。但在其他语言环境中则会抛出异常。原因是DateFormat.getDateInstance()初始化时会跟据当前语言环境设置日期格式。

  1. DateFormat.getDateInstance() 根据当前语言环境设置日期模式:
 zh_CN : yyyy-MM-dd : 2014-05-19
 en_us : MMM d, yyyy : May 19, 2014
  1. DateFormat.getDateInstance(int style) 根据当前语言环境设置指定的日期模式:
// Locale.SIMPLIFIED_CHINESE | Locale.CHINA | Locale.CHINESE
 // DateFormat.DEFAULT == DateFormat.MEDIUM
 DateFormat.getDateInstance(DateFormat.DEFAULT); // yyyy-M-d
 DateFormat.getDateInstance(DateFormat.FULL);// yyyy'年'M'月'd'日' EEEE
 DateFormat.getDateInstance(DateFormat.LONG);// yyyy'年'M'月'd'日'
 DateFormat.getDateInstance(DateFormat.MEDIUM);// yyyy-M-d
 DateFormat.getDateInstance(DateFormat.SHORT);// yy-M-d
 // Locale.US
 DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.CHINESE); // MMM d, yyyy
 DateFormat.getDateInstance(DateFormat.LONG);// MMMM d, yyyy
 DateFormat.getDateInstance(DateFormat.SHORT);// M/d/yy
 DateFormat.getDateInstance(DateFormat.MEDIUM);// MMM d, yyyy
 DateFormat.getDateInstance(DateFormat.FULL);// EEEE, MMMM d, yyyy
  1. DateFormat.getDateInstance(int style, Locale aLocale) 指定语言环境及相应日期模式
    DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.CHINESE);
     // 上述代码等价于
     Locale.setDefault(Locale.CHINESE);
     DateFormat.getDateInstance(DateFormat.DEFAULT)
    

    因此,在使用DateFormat时,尽量不要使用无参的getDateInstance()方法,因其依赖具体的环境,有可能会造成不同环境运行异常的情况。如果确实不知道具体的语言环境极其格式模式的,那么使用SimpleDateFormat直接指定日期格式即可.这样可以避免因不同语言环境导致的日期格式错误。

    String sDate = "2014-12-20";
    try {
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
     Date date = sdf.parse(sDate);
    } catch (Exception e) {
     e.printStackTrace();
    }