将PST时间转换为android中的本地设备时间



我正在尝试使用以下函数将PST时间转换为设备本地时间。它运行良好,但在伦敦时区运行不正常。如果是太平洋标准时间凌晨04:58,那么根据伦敦时区,它应该显示下午12:58,但显示的是凌晨12:58。我在这里做错了什么吗?请耐心引导。

System.out.println("2015-06-23 04:58:00 AM = "
                + getFormattedTimehhmm(new TimeTest()
                        .getTimeRelativeToDevice("2015-06-23 04:58:00 AM")));
public String getTimeRelativeToDevice(String pstTime) {
        final String DATE_TIME_FORMAT = "yyyy-MM-dd hh:mm:ss a";
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_FORMAT);
        TimeZone fromTimeZone = TimeZone.getTimeZone("America/Los_Angeles");
        TimeZone toTimeZone = TimeZone.getTimeZone("Europe/London");
        // Get a Calendar instance using the default time zone and locale.
        Calendar fromCalendar = Calendar.getInstance();
        // Set the calendar's time with the given date
        fromCalendar.setTimeZone(fromTimeZone);
        try {
            fromCalendar.setTime(sdf.parse(pstTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("Input: " + fromCalendar.getTime() + " in "
                + fromTimeZone.getDisplayName());    
        return sdf.format(fromCalendar.getTime());
    }

我同意Moritz的观点,即使用Joda Time会使代码更简单,但您应该能够比当前方法更简单地完成所有这些

public String getTimeRelativeToDevice(String pstTime) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a", Locale.US);
    sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
    Date parsed = sdf.parse(pstTime);
    sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
    return sdf.format(parsed);
}

目前你在做各种各样的事情,但从来没有指定SimpleDateFormat的时区,这是重要的部分。。。

您应该使用jodatime。它大大简化了时区转换。例如:

new LocalDateTime(timestamp.getTime()).toDateTime(DateTimeZone.UTC);  

相关内容

  • 没有找到相关文章

最新更新