在 android 中将 PST 时间转换为本地设备时间
Converting PST time to Local device time in android
我正在尝试使用以下函数将 PST 时间转换为设备本地时间。它工作正常,但在伦敦时区无法正常工作。如果它的 04:58 AM PST 那么它应该显示 12:58 PM 根据伦敦时区但它显示 12:58 AM。我在这里做错了什么吗?请多多指教
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());
}
你应该使用 jodatime。它极大地简化了时区转换。例如:
new LocalDateTime(timestamp.getTime()).toDateTime(DateTimeZone.UTC);
我同意 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
的时区,这是重要的部分...
我正在尝试使用以下函数将 PST 时间转换为设备本地时间。它工作正常,但在伦敦时区无法正常工作。如果它的 04:58 AM PST 那么它应该显示 12:58 PM 根据伦敦时区但它显示 12:58 AM。我在这里做错了什么吗?请多多指教
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());
}
你应该使用 jodatime。它极大地简化了时区转换。例如:
new LocalDateTime(timestamp.getTime()).toDateTime(DateTimeZone.UTC);
我同意 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
的时区,这是重要的部分...