2

javaのSimpleDateFormat parseメソッドは、タイムゾーンの短い名前、長い名前、およびオフセットをサポートします。タイムゾーンIDのサポートが提供されないのはなぜですか?

たとえば。

SimpleDateFormat sdf = new SimpleDateFormat("z");
sdf.parse("IST");                       //works fine

SimpleDateFormat sdf = new SimpleDateFormat("z");
sdf.parse("Indian Standard Time");      //Also works fine

Javaがこれをサポートしない理由:

SimpleDateFormat sdf = new SimpleDateFormat("z");
sdf.parse("Asia/Kolkata");              //does not work
4

2 に答える 2

2

SimpleDateFormat がタイムゾーン ID をサポートすべきでないと判断した理由を JDK 開発者に尋ねる必要があります。また、SimpleDateFormat API では、「z」に期待されるタイムゾーン形式が明確ではありません。しかし、私はそれが何をサポートしているかを知っています。DateFormatSymbols.getZoneStrings() によって返されるデータに対してタイムゾーンをチェックします。これはタイムゾーンの配列であり、各タイムゾーンは文字列の配列です

    •[0] - time zone ID
    •[1] - long name of zone in standard time
    •[2] - short name of zone in standard time
    •[3] - long name of zone in daylight saving time
    •[4] - short name of zone in daylight saving time

ゾーン ID はローカライズされていません。その他はローカライズされた名前です。詳細については、API を参照してください。

利用可能なすべてのタイムゾーンを次のように取得できます

    DateFormatSymbols dfs = DateFormatSymbols.getInstance();
    for(String[] s : dfs.getZoneStrings()) {
        System.out.println(Arrays.toString(s));
    }

結果 (ロケールによって異なります)

...
[Asia/Calcutta, India Standard Time, IST, India Daylight Time, IDT]
...

したがって、SimpleDateFormat (私のロケールでは) では、インド標準時、IST、インド夏時間、または「z」の IDT は許可されますが、アジア/カルカッタ (タイムゾーン ID) は許可されません。

于 2013-02-01T11:40:27.833 に答える
2

Java 8 を使用している場合は、新しい Date and Time API を使用できます。「VV」はタイムゾーン ID を意味します。

https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.htmlを参照してください。

例:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm VV");
ZonedDateTime zonedDateTime = ZonedDateTime.parse("06/23/2015 21:00 US/Pacific", formatter);
于 2015-06-23T08:04:05.160 に答える