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 ロケールで変更されるかどうかを知りたいだけです。かわった?「ロシア語」、「英語」など、入力が同じであることを示唆していますが、checkDate の値は同じですか? 助けてくれてありがとう。

4

4 に答える 4

3

Date.toString()ロケールに依存しません。観察できる最も重要な変更はタイムゾーンです。これは、コンピューターのタイムゾーン設定によって異なります。これは仕様によるものです

この Date オブジェクトを次の形式の String に変換します。

   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ですNovDec
  • dd10 進数 2 桁の日付 ( 01~ ) です。31
  • hh2 桁の 1 日の時間 ( 00~ ) です。23
  • mm2 桁の 10 進数としての時間 ( 00~ )内の分です。59
  • ss分内の秒 ( 0061、2 桁の 10 進数) です。
  • zzzタイム ゾーンです (夏時間が反映される場合もあります)。標準時間帯の略語には、メソッド parse によって認識されるものが含まれます。タイムゾーン情報が利用できない場合zzzは空です。つまり、文字がまったく含まれていません。
  • yyyy10 進数 4 桁の年です。
于 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()、文字列への変換を担当します。ローカル システムでのロケールの変更は問題ではありません。

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

ロケールで自動的に動作します。上記のコードも正常に動作します。

于 2013-04-25T09:12:02.100 に答える