0

ISTTimeにJavaのDateフィールドがあります。同じものをEST時刻に変換したいのですが、出力は日付型のみである必要があります。私は以下のコードを使用して同じことを達成することができます:-

SimpleDateFormat dateTimeFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
dateTimeFormat.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
Date date = new Date();
DateFormat timeFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
timeFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String estTime = timeFormat.format(date);
date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.ENGLISH).parse(estTime);

上記のコードの問題は、日付がEST時間で変換されても、タイムゾーンがESTではなくISTとして表示されることです。残りの日付は完全に正常に変換されます。日付フィールドでタイムゾーンをESTに明示的に設定する方法はありますか。これに関するヘルプをいただければ幸いです。

-サブハディープ

4

4 に答える 4

1

クラスはDateタイムゾーンに依存しません。基本的に、常に GMT に基づいていますが、印刷時には現在のシステム タイム ゾーンを使用して調整されます。

ただし、Calendarタイムゾーン固有です。Calendar.setTimeZone()を参照してください。

検討:

   Calendar cal = new GregorianCalendar();
   cal.setTimeZone(TimeZone.getTimeZone("America/New_York"));
   cal.setTime(new Date());
于 2013-03-18T12:50:49.840 に答える
0

John B による正解は、java.util.Date にはタイム ゾーンがあるように見えますが、そうではないことを説明しています。そのtoStringメソッドは、文字列表現を生成するときに JVM のデフォルトのタイム ゾーンを適用します。

これは、Java にバンドルされている java.util.Date および .Calendar クラスを避ける多くの理由の 1 つです。それらを避けてください。代わりに、Joda -Timeまたは Java 8 に組み込まれた java.time パッケージ (JSR 310 で定義された Joda-Time に触発されたもの) を使用してください。

Joda-Time 2.3 のコード例を次に示します。

String input = "01/02/2014 12:34:56";
DateTimeFormatter formatterInput = DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm:ss" );
DateTimeZone timeZoneIndia = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeIndia = formatterInput.withZone( timeZoneIndia ).parseDateTime( input );

DateTimeZone timeZoneNewYork = DateTimeZone.forID( "America/New_York" );
DateTime dateTimeNewYork = dateTimeIndia.withZone( timeZoneNewYork );

DateTime dateTimeUtc = dateTimeIndia.withZone( DateTimeZone.UTC );

コンソールにダンプ…</p>

System.out.println( "input: " + input );
System.out.println( "dateTimeIndia: " + dateTimeIndia );
System.out.println( "dateTimeNewYork: " + dateTimeNewYork );
System.out.println( "dateTimeUtc: " + dateTimeUtc );

実行すると…</p>

input: 01/02/2014 12:34:56
dateTimeIndia: 2014-01-02T12:34:56.000+05:30
dateTimeNewYork: 2014-01-02T02:04:56.000-05:00
dateTimeUtc: 2014-01-02T07:04:56.000Z
于 2014-03-08T08:36:52.420 に答える
0

zパターンにタイムゾーンパターンを追加する必要がありますSimpleDateFormatか?

だから、それはする必要がありますDateFormat timeFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z")。私はあなたのコードを次のように変更しました:

public static void main(String[] args) throws ParseException {
    SimpleDateFormat dateTimeFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
    dateTimeFormat.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
    Date date = new Date();

    System.out.println(dateTimeFormat.format(date)); // this print IST Timezone

    DateFormat timeFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z");
    timeFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));

    String estTime = timeFormat.format(date);
    date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z", Locale.ENGLISH).parse(estTime);

    System.out.println(timeFormat.format(date)); // this print EDT Timezone currently (on March)
}

最後の print ステートメントでは、現在の日付形式がEDT タイムゾーン(東部夏時間) で出力されます。多分これのため

于 2013-03-18T13:10:18.103 に答える