0
Calendar cal= Calendar.getInstance();
System.out.println(cal.getTimeZone().getID());
cal.set(2012, 8, 21);
java.util.Date d = new java.util.Date();
System.out.println(d.toString());

//System.setProperty("user.timezone", "America/Chicago");

//  System.out.println(TimeZone.getDefault().getID());

TimeZone tz1 = TimeZone.getTimeZone("Africa/Algiers");
//tz1.setDefault(tz1);

cal.setTimeZone(tz1);
System.out.println(cal.getTimeZone().getID());

//cal.set(2012, 8, 21);
System.out.println(d.toString());

出力は --

Asia/Calcutta
Tue Aug 21 11:35:06 IST 2012
Africa/Algiers
Tue Aug 21 11:35:06 IST 2012

現在のタイムゾーン形式の時刻が必要ですが、IST で表示されます。これを行う方法。

4

3 に答える 3

1

編集: 与えられたコードが を呼び出していないことに気付きましたcal.getTime()。カレンダーの値を完全に無視しています。とにかくあなたが望んでいたことはしませんが、あなたが印刷している価値はただnew Date()... カレンダーがどのように関与すると思いますか?

現在のタイムゾーン形式の時刻が必要ですが、IST で表示されます。これを行う方法。

最初から , の使用は避けてくださいDate.toString。値にはタイム ゾーンのDate概念がないためtoString、常にシステムのタイム ゾーンを使用します。再度呼び出さずにカレンダーのタイム ゾーンをset変更しても、基になる値は変更されません。

次の 2 つのオプションがあります。

  • を使用SimpleDateFormatし、フォーマットする前にタイムゾーンを指定します
  • 代わりにJoda Timeを使用してください。これは、そもそもより豊富な日付と時刻の API です。

個人的には、後者のオプションを使用することを強くお勧めします。特に、かなりの日付/時刻操作を行っている場合はそうです。DateCalendarそしてSimpleDateFormat、どの時点でもあなたが持っているデータを明確に表現するコードを書かせないでください.

于 2012-08-21T06:14:48.320 に答える
0

TimeZone.setDefault(tz1);の代わりに使用//tz1.setDefault(tz1);

Calendar cal = Calendar.getInstance();
    System.out.println(cal.getTimeZone().getID());
    cal.set(2012, 8, 21);
    java.util.Date d = new java.util.Date();
    System.out.println(d.toString());       

    TimeZone tz1 = TimeZone.getTimeZone("Africa/Algiers");
    TimeZone.setDefault(tz1);

    cal.setTimeZone(tz1);
    System.out.println(cal.getTimeZone().getID());

    System.out.println(d.toString());

私はあなたのプログラムを実行します、出力を見てください:

Asia/Calcutta
Tue Aug 21 11:47:13 IST 2012
Africa/Algiers
Tue Aug 21 07:17:13 CET 2012
于 2012-08-21T06:16:36.163 に答える
0

カレンダーはそのようには機能しません...私はSimpleDateFormatコードを持っています..役立つかもしれません..これを試してください

public class TimeZoneTest {  

    public static void main(String[] args) {  
        new TimeZoneTest().setTimeZones();  
    }  

    private void setTimeZones(){  

        String etStart = "";  
        String ctStart = "";  
        String mtStart = "";  
        String ptStart = "";  

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

                    String dateString = "Mon Mar 14 09:30:51 GMT 2011";  

                                //this input date doesn't convert  
                                //String dateString = "Mon Mar 14 09:30:51 PDT 2011";  

        System.out.println("Input Date: " + dateString);  
        System.out.println("Default TimeZone: " + TimeZone.getDefault());         

        try {  
            etStart = getDateInTimeZone(dateString, fullDateFormat, TimeZone.getTimeZone("America/New_York"));  
            ctStart = getDateInTimeZone(dateString, fullDateFormat, TimeZone.getTimeZone("America/Chicago"));  
            mtStart = getDateInTimeZone(dateString, fullDateFormat, TimeZone.getTimeZone("America/Denver"));  
            ptStart = getDateInTimeZone(dateString, fullDateFormat, TimeZone.getTimeZone("America/Los_Angeles"));  
        } catch (ParseException e) {  
            e.printStackTrace();  
                                 }  

        System.out.println("Eastern Date: " + etStart);  
        System.out.println("Central Date: " + ctStart);  
        System.out.println("Mountain Date: " + mtStart);  
        System.out.println("Pacific Date: " + ptStart);       

    }  

     private String getDateInTimeZone(Date inputDt, TimeZone targetTimeZone) throws ParseException{  

        DateFormat fullDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");  
        fullDateFormat.setTimeZone(targetTimeZone);  
        return fullDateFormat.format(inputDt);  

    }  

}  
于 2012-08-21T06:17:04.993 に答える