3
    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 语言环境中发生变化改变了吗?如“Russian”,“English”,提示输入相同,checkDate值是否相同?谢谢你的帮助。

4

4 回答 4

3

Date.toString()独立于语言环境。您可以观察到的最重要的变化是时区,这取决于您计算机的时区设置。这是设计使然

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

   dow mon dd hh:mm:ss zzz yyyy

在哪里:

  • dow是星期几 ( Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
  • mon是月份 ( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
  • dd是月份中的日期(01通过31),为两位小数。
  • hh是一天中的小时(00通过23),为两位小数。
  • mm是一小时内的分钟(00通过59),为两位小数。
  • ss是一分钟内的第二个(00通过61, 作为两位小数。
  • zzz是时区(并且可能反映夏令时)。标准时区缩写包括方法 parse 识别的缩写。如果时区信息不可用,zzz则为空 - 也就是说,它根本不包含任何字符。
  • yyyy是年份,四位小数。
于 2013-04-25T09:06:45.973 回答
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();
}
于 2013-04-25T09:07:27.343 回答
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 指出的那样,时区将根据计算机区域配置的设置位置而改变

于 2013-04-25T09:11:21.537 回答
0

通常toString()负责转换为String。本地系统上的语言环境更改无关紧要。

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

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

于 2013-04-25T09:12:02.100 回答