5

我开发了一个应用程序,因为我需要保存事件的日期和时间。默认情况下,时间和日期采用“美国/芝加哥”时区格式。现在,我需要将它们转换为用户设备的时区格式。但我得到了错误的格式。

我做了以下。

SimpleDateFormat curFormater1=new SimpleDateFormat("MM-dd-yyyy-hh:mm a");//10-23-2012-08:30 am

curFormater1.setTimeZone(TimeZone.getTimeZone("America/Chicago")); 

curFormater1.setTimeZone(TimeZone.getDefault());

当前输出: TimeZone.getTimeZone("America/Chicago") 是 10-22-2012-10:00 PM TimeZone.getDefault() 是 10-23-2012-08:30 AM

所需的输出 TimeZone.getTimeZone("America/Chicago") 是 10-23-2012-08:30 AM TimeZone.getDefault() 是 10-23-2012-07:00 PM

4

2 回答 2

2

一些例子

在时区之间转换时间

在时区之间转换时间

      import java.util.Calendar;
       import java.util.GregorianCalendar;
       import java.util.TimeZone;

  public class TimeZoneExample {
      public static void main(String[] args) {

    // Create a calendar object and set it time based on the local
    // time zone

    Calendar localTime = Calendar.getInstance();
    localTime.set(Calendar.HOUR, 17);
    localTime.set(Calendar.MINUTE, 15);
    localTime.set(Calendar.SECOND, 20);

    int hour = localTime.get(Calendar.HOUR);
    int minute = localTime.get(Calendar.MINUTE);
    int second = localTime.get(Calendar.SECOND);


    // Print the local time

    System.out.printf("Local time  : %02d:%02d:%02d\n", hour, minute, second);


    // Create a calendar object for representing a Germany time zone. Then we
    // wet the time of the calendar with the value of the local time

    Calendar germanyTime = new GregorianCalendar(TimeZone.getTimeZone("Germany"));
    germanyTime.setTimeInMillis(localTime.getTimeInMillis());
    hour = germanyTime.get(Calendar.HOUR);
    minute = germanyTime.get(Calendar.MINUTE);
    second = germanyTime.get(Calendar.SECOND);


    // Print the local time in Germany time zone

    System.out.printf("Germany time: %02d:%02d:%02d\n", hour, minute, second);
}
}
于 2012-12-12T12:32:37.493 回答
2

有同样的麻烦,但找到了出路。

TimeZone 默认设置为设备的时区。要更改此设置并将其设置为特定时区,请使用 getRawOffset() 属性。
此方法从当前时间计算毫秒数。因此,您可以添加指定时区的毫秒数并减去默认时区的毫秒数。

当我尝试将其更改为 timeZone 'GMT_ID'

values.put(CalendarContract.Events.DTSTART, startDate.getTime()  +TimeZone.getTimeZone(GMT_ID).getRawOffset() -TimeZone.getDefault().getRawOffset());

希望这可以帮助。

于 2016-09-26T10:27:00.550 回答