web-dev-qa-db-ja.com

java内の他のタイムゾーンへの日付と時刻の変換

このコードを書いて、現在のシステムの日付と時刻を他のタイムゾーンに変換しました。エラーは発生しませんが、期待どおりの出力が得られません。私が特定の時間にプログラムを実行する場合のように。私の出力は::

インドの現在の時刻は:: Fri Feb 24 16:09:23 IST 2012

:: 中央標準時の日時は:: Sat Feb 25 03:39:23 IST 2012

そしてCSTタイムゾーンによる実際の時間は::

Friday, 24 February 4:39:16 a.m(GMT - 6:00)

したがって、いくつかの時間ギャップがあります。そして、私はなぜこれが起こっているのかわかりません。任意の助けをいただければ幸いです。コードは::

package MyPackage;

import Java.text.DateFormat;
import Java.text.ParseException;
import Java.text.SimpleDateFormat;

import Java.util.Calendar;
import Java.util.Date;
import Java.util.TimeZone;

public class Temp2 {


    public static void main(String[] args) {

        try {
            Calendar currentdate = Calendar.getInstance();
            String strdate = null;
            DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            strdate = formatter.format(currentdate.getTime());
            TimeZone obj = TimeZone.getTimeZone("CST");

            formatter.setTimeZone(obj);
            //System.out.println(strdate);
            //System.out.println(formatter.parse(strdate));
            Date theResult = formatter.parse(strdate);

            System.out.println("The current time in India is  :: " +currentdate.getTime());

            System.out.println("The date and time in :: "+ obj.getDisplayName() + "is ::" + theResult);
        } catch (ParseException e) {
           e.printStackTrace();
        }
    }
}
9
Shantanu Tomar

それはウェブ上にあります。グーグルかもしれない。とにかく、ここにあなたのためのバージョンがあります(恥ずかしくないことに here から変更されます):

Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone("CST");

calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}

calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}

System.out.println(calendar.getTime());
20
Nishant

あなたの間違いは、parseの代わりにformatを呼び出すことです。

parseを呼び出して文字列から日付を解析しますが、あなたの場合、日付があり、正しいタイムゾーンを使用してフォーマットする必要があります。

コードを

Calendar currentdate = Calendar.getInstance();
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
TimeZone obj = TimeZone.getTimeZone("CST");
formatter.setTimeZone(obj);
System.out.println("Local:: " +currentdate.getTime());
System.out.println("CST:: "+ formatter.format(currentdate.getTime()));

期待どおりの出力が得られることを願っています。

8
Oleg Mikheev

Javaでの日々の作業での日付の処理は簡単な作業ではありません。コーディング日を簡略化する Joda-Time を使用することをお勧めします。 「車輪を再発明する」。

4
Dario

"CST6CDT"を使用できます。国によっては夏はCDT、冬はCSTに準拠しているためです

 public static String getDateInCST() {
             Calendar calendar = Calendar.getInstance();
             DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
             formatter.setTimeZone(TimeZone.getTimeZone( "CST6CDT"));
             String strdate = formatter.format(calendar.getTime());
             TimeZone.getAvailableIDs();
             return strdate;
     }
1
Pratik Sinha

問題は、日付オブジェクトを印刷するときにtoStringメソッドを呼び出し、マシンのデフォルトのタイムゾーンで印刷されることです。このコードを試して、違いを確認してください。

Calendar currentdate = Calendar.getInstance();
String strdate = null;
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssz");
strdate = formatter.format(currentdate.getTime());
System.out.println("strdate=>" + strdate);
TimeZone obj = TimeZone.getTimeZone("CST");

formatter.setTimeZone(obj);
strdate = formatter.format(currentdate.getTime());
Date theResult = formatter.parse(strdate);

System.out.println("The current time in India is  :: " +currentdate.getTime());

System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + theResult);
System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + strdate);
1
Abhishek bhutra