2

I have seen several questions like this but I can't quite get the conversion right. I want to convert a date like the following

20121116203036Z

to

2012-11-16 15:30:36

I have the following code

    dateStringTime.set( year, mon-1 , day, hour, minute, second );

    Date date = dateStringTime.getTime();

    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    formatter.setTimeZone(TimeZone.getTimeZone("EST"));

    String output = formatter.format();
    return output;

which works but it gives me the below

2012-11-16 20:30:36

Any advice on how to get 15 instead of 20?

4

4 に答える 4

2

まず、あなたのコードは「日付」をフォーマットしていません。これを試してください:

  String output = formatter.format(date);

また、私dateStringTimeCalendar. このメソッドは、タイムゾーンに影響を与える可能性のあるCalendar.getInstance()a も受け入れることに気付きました。Locale

私のコード:

    Calendar dateStringTime = Calendar.getInstance();

    //convert 20121116203036Z       
    int year = 2012;
    int mon = 11;
    int day = 16;
    int hour = 20;
    int minute = 30;
    int second = 36;

    dateStringTime.set( year, mon-1 , day, hour, minute, second );

    Date date = dateStringTime.getTime();

    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    formatter.setTimeZone(TimeZone.getTimeZone("EST"));

    String output = formatter.format(date);
    System.out.println(output);     

私の出力:

2012-11-16 21:30:36

時間が 1 時間ずれていることに気付きましたか? これは、私が中部時間帯にいて、「EST」を要求するときに JVM がそれを考慮に入れているためです。元の時刻は現在のタイムゾーンにあると考えています。

コメントアウトするとどうなるか

        //formatter.setTimeZone(TimeZone.getTimeZone("EST"));
于 2013-02-15T19:18:02.207 に答える
1

問題は、間違ったタイムゾーンで日付を入力していることです。あなたがこれをするとき

dateStringTime.set(year, month-1 , day, hour, minute, second);

実際には、デフォルトのタイムゾーンを使用して日付を入力しています。これは、UTCである可能性は低いです。裏では、JavaDateはUTCとして表されるため、 UTCで直接入力するのではなく、日付/時刻をUTCに変換します。

基本的に、次のタイムゾーン変換のシーケンスを実行します:EST-> UTC-> EST

UTCを使用して日付/時刻を指定する場合は、次のようにする必要があります。

dateStringTime.setTimeZone(TimeZone.getTimeZone("UTC"));
dateStringTime.set(year, month-1 , day, hour, minute, second);

次に、UTC-> ESTからのみ移動し、適切な出力が得られるはずです。

于 2013-02-15T20:22:59.827 に答える
1

タイムゾーン。getDefault()は実行時のタイムゾーンを提供します。からgetRawOffet値を削除するdateと、UTC になります。もう1つのステップは、UTCからEST値を追加/削除することであり、変換が完了します

于 2013-02-15T19:16:39.357 に答える
1
于 2016-11-16T03:16:09.480 に答える