2012-03-30 5 views
0

タイムゾーンの入力日時と入力日時のタイムゾーンを指定し、関連する日時を予想されるタイムゾーンに設定します。Javaの特定の日時のタイムゾーン変換

これは私の方法です。 convertToTimezone( "03/08/2010 20:19:00 PM"、 "アジア/上海"、 "米国/中部"); 上記の時間は、アジア/上海での時間です。US/Centralでの対応時間は何ですか?

実際にはうまくいきますが、実際の時間と1時間差があります。 どこが間違っているのか分かりますか?

ここにコードがあります。

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 
import java.util.TimeZone; 

public class DateUtil 
{ 

    private static String format_date="MM/dd/yyyy HH:mm:ss a"; 

    public static void main(String a[]) 
    { 
     try 
     { 
      String sourceTimezone="Asia/Shanghai"; 
      String destTimezone="US/Central";   
      String outputExpectedTimezone=convertToTimezone("03/08/2010 20:19:00 PM",sourceTimezone,destTimezone); 
      System.out.println("outputExpectedTimezone :"+outputExpectedTimezone); 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
    public static String convertToTimezone(String inputDate,String inputDateTimezone,String destinationDateTimezone)throws Exception 
    { 
     String outputDate=null; 

     SimpleDateFormat format = new SimpleDateFormat(format_date); 
     format.setTimeZone(TimeZone.getTimeZone(inputDateTimezone)); 

     Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(inputDateTimezone)); 
     calendar.setTime(format.parse(inputDate)); 
     calendar.add(Calendar.MILLISECOND,-(calendar.getTimeZone().getRawOffset()));   
     calendar.add(Calendar.MILLISECOND, - calendar.getTimeZone().getDSTSavings()); 
     calendar.add(Calendar.MILLISECOND, TimeZone.getTimeZone(destinationDateTimezone).getRawOffset()); 

     outputDate=format.format(calendar.getTime()); 
     return outputDate; 
    } 

    } 

答えて

2

カレンダーには、特定の瞬間を表すものを追加しないでください。実際、カレンダーはまったく必要ありません。代わりに

は、二つの異なるフォーマット、各時間帯の1持っている:余談として

public static String convertToTimezone(String inputDate, 
    String inputDateTimezone, 
    String destinationDateTimezone) 
    throws Exception 
{ 
    SimpleDateFormat parser = new SimpleDateFormat(format_date); 
    parser.setTimeZone(TimeZone.getTimeZone(inputDateTimezone)); 

    Date date = parser.parse(inputDate); 

    SimpleDateFormat formatter = new SimpleDateFormat(format_date); 
    formatter.setTimeZone(TimeZone.getTimeZone(outputDateTimezone)); 
    return formatter.format(date); 
} 

を、私は徹底的をいただきたいJoda Timeを使用することをお勧めの代わりに内蔵された日付/時刻のAPI。

関連する問題