Я дам время ввода даты для часового пояса и часовой пояс для даты ввода данных, и мы хотим, чтобы соответствующее время в ожидаемом часовом поясе.Изменение часового пояса для определенного времени и времени в 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;
}
}