このコードを書いて、現在のシステムの日付と時刻を他のタイムゾーンに変換しました。エラーは発生しませんが、期待どおりの出力が得られません。私が特定の時間にプログラムを実行する場合のように。私の出力は::
インドの現在の時刻は:: 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();
}
}
}
それはウェブ上にあります。グーグルかもしれない。とにかく、ここにあなたのためのバージョンがあります(恥ずかしくないことに 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());
あなたの間違いは、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()));
期待どおりの出力が得られることを願っています。
Javaでの日々の作業での日付の処理は簡単な作業ではありません。コーディング日を簡略化する Joda-Time を使用することをお勧めします。 「車輪を再発明する」。
"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;
}
問題は、日付オブジェクトを印刷するときに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);