14

次のような日付を表す文字列があるとします。

「2009年7月8日水曜日17:08:48GMT」

したがって、その文字列を次のような日付オブジェクトに解析します。

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy");
Date fromDate = (Date)formatter.parse(fromDateString);

それは私に正しい日付オブジェクトを与えます。ここで、この日付をCDT値として表示します。

私は多くのことを試しましたが、正しく動作させることができません。これを機能させるには、DateFormatクラスを使用する単純なメソッドが必要です。何かアドバイス?私の最後の試みはこれでした:

formatter.setTimeZone(toTimeZone);
String result = formatter.format(fromDate);
4

4 に答える 4

19

「ZZZ」の代わりに「zzz」を使用します。「Z」はRFC822タイムゾーンのシンボルです。

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");

そうは言っても、日付/時刻に関する私の標準的なアドバイスは、完全に優れたAPIであるJodaTimeを使用することです。

編集:短いが完全なプログラム:

import java.text.*;
import java.util.*;

public class Test
{
    public List<String> names;

    public static void main(String [] args)
        throws Exception // Just for simplicity!
    {
        String fromDateString = "Wed Jul 08 17:08:48 GMT 2009";
        DateFormat formatter = new SimpleDateFormat
            ("EEE MMM dd HH:mm:ss zzz yyyy");
        Date fromDate = (Date)formatter.parse(fromDateString);
        TimeZone central = TimeZone.getTimeZone("America/Chicago");
        formatter.setTimeZone(central);
        System.out.println(formatter.format(fromDate));
    }
}

出力:Wed Jul 08 12:08:48 CDT 2009

于 2009-07-22T16:33:44.430 に答える
4

使用:

formatter.setTimeZone(TimeZone.getTimeZone("US/Central"));

出力:

Wed Jul 08 12:08:48 CDT 2009

私のマシンでのあなたの例の日付について。これは、フォーマット文字列でZZZをzzzに置き換えた後です。

于 2009-07-22T19:11:35.687 に答える
3

古いスレッドを掘り起こしてすみません。しかし、すべてのタイムゾーンIDを定数クラスとして保持するJavaクラスがあるかどうか疑問に思いました。したがって、次のようにタイムゾーンを設定するときにタイムゾーンIDをハードコーディングする必要はありません。

formatter.setTimeZone(TimeZone.getTimeZone("US/Central"));

代わりに、より標準的で統一された何かを実行します。

formatter.setTimeZone(TimeZone.getTimeZone(SomeConstantClass.US_CENTRAL)); 

ここで、SomeConstantClass.javaは、TimeZoneクラスでサポートされているさまざまなタイムゾーンIDを参照する定数を保持するクラスです。

于 2013-05-09T18:48:33.727 に答える
1
于 2016-10-12T04:30:37.997 に答える