java.util.Date语言环境中的toString()方法是独立的吗?

时间:2013-04-25 08:52:51

标签: java java.util.date

    try {
         SimpleDateFormat strTemp = new SimpleDateFormat("ddMMMyy", Locale.US);
          Date reasult = strTemp.parse(input);
         String   checkDate = reasult.toString().substring(8, 10) + reasult.toString().substring(4, 7) + reasult.toString().substring(26);
         if (!checkDate.toUpperCase().equals(input))
             return false;

         else
          return true;
       } catch (Exception ex) {
            return false;
     }

由于API告诉我java.util.Date.toString()就像格式“dow mon dd hh:mm:ss zzz yyyy”,我只是想知道toString()的内容格式是否会改变而Windows语言环境改变了吗?如“俄语”,“英语”,建议输入相同,checkDate值是否相同?谢谢你的帮助。

4 个答案:

答案 0 :(得分:3)

Date.toString()与区域设置无关。您可以观察到的最重要的变化是时区,这取决于计算机的时区设置。这是by design

  

将此Date对象转换为以下形式的字符串:

   dow mon dd hh:mm:ss zzz yyyy
     

其中:

     
      
  • dow是一周中的某一天(SunMonTueWedThuFriSat)。
  •   
  • mon是月份(JanFebMarAprMayJun,{{ 1}},JulAugSepOctNov)。
  •   
  • Dec是一个月中的某一天(dd01),为两位小数。
  •   
  • 31是一天中的小时(hh00),为两位小数。
  •   
  • 23是一小时内的分钟(mm00),为两位小数。
  •   
  • 59是分钟内的第二个ss00,为两位小数。
  •   
  • 61是时区(可能反映夏令时)。标准时区缩写包括方法解析识别的缩写。如果时区信息不可用,则zzz为空 - 也就是说,它根本不包含任何字符。
  •   
  • zzz是年份,为四位十进制数字。
  •   

答案 1 :(得分:2)

它不会因其语言环境独立而改变。曾经有toLocaleString()但现在已弃用。

您可以看到代码 -

public String toString() {

    // "EEE MMM dd HH:mm:ss zzz yyyy";
    BaseCalendar.Date date = normalize();
    StringBuilder sb = new StringBuilder(28);
    int index = date.getDayOfWeek();
    if (index == gcal.SUNDAY) {
        index = 8;
    }
    convertToAbbr(sb, wtb[index]).append(' ');                        // EEE
    convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' ');  // MMM
    CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd

    CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':');   // HH
    CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
    CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
    TimeZone zi = date.getZone();
    if (zi != null) {
        sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
    } else {
        sb.append("GMT");
    }
    sb.append(' ').append(date.getYear());  // yyyy
    return sb.toString();
}

答案 2 :(得分:2)

仔细考虑时区!除此之外,不,它不会根据语言环境而改变。检查java.util.Date.toString()方法的源代码(这总是一个好主意!):

 public String toString() {
    // "EEE MMM dd HH:mm:ss zzz yyyy";
    BaseCalendar.Date date = normalize();
    StringBuilder sb = new StringBuilder(28);
    int index = date.getDayOfWeek();
    if (index == gcal.SUNDAY) {
        index = 8;
    }
    convertToAbbr(sb, wtb[index]).append(' ');            
    ...

并且该wtb是私有的最终静态字符串:

private final static String wtb[] = {
    "am", "pm",
    "monday", "tuesday", "wednesday", "thursday", "friday",
    "saturday", "sunday",
    "january", "february", "march", "april", "may", "june",
    "july", "august", "september", "october", "november", "december",
    "gmt", "ut", "utc", "est", "edt", "cst", "cdt",
    "mst", "mdt", "pst", "pdt"
};

所以,不,它不会改变,它将永远是英文名字。

更新:正如@nhahtdh指出的那样,时区将根据计算机区域配置的设置位置而改变

答案 3 :(得分:0)

通常toString()负责转换为String。什么是本地系统上的区域设置更改并不重要。

    //Now my local date time (US & CANADA)
    Date dt1=new Date();    
    System.out.println("Date is ::"+dt1.toString());

它可以自动使用您的语言环境。上面的代码也正常工作。