Android在默认时区解析时间



我想解析一个格式化为"12:34:56"的时间值,它来自外部web服务,Date, Calendar或任何我可以稍后与当前时间进行比较的东西。

问题是,在Android上,DateFormat.parse似乎忽略了用户的默认时区和解析值,如果它是在UTC。给定以下代码:

DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
String inTime = "12:34:56";
Date time = timeFormat.parse(inTime);
Date now = new Date();

我在我的桌面(Java 1.6.0_29)上得到了想要的结果:

Thu Jan 01 12:34:56 CET 1970
Mon Nov 21 20:53:04 CET 2011

换句话说,字符串"12:34:56"在默认时区中被解析。然而,在Android上,这似乎在UTC中被解析,因为它是一个小时:

Thu Jan 01 11:34:56 GMT+0100 1970
Mon Nov 21 20:53:02 GMT+0100 2011

我甚至尝试使用timeFormat.setTimeZone(TimeZone.getDefault())设置时区,但这没有帮助。是否有任何方法强制DateFormat.parse在Android上的默认(用户)时区解析时间,或者我必须将所有内容转换为UTC并返回以使其工作?

原来我的设备在设置时区时确实有些问题。我试着在其他设备上运行代码,结果和预期的一样。

我通过安装TimeZone Fixer和更新时区信息解决了我手机的问题。

我将保留我的代码,但如果问题变得更常见,我将不得不实现一些变通方法。

我遇到了同样的问题:我只需要将区域设置设置为dateFormatter。以下是我所做的:

public static String getDateAsString(long milliSeconds, String dateFormat)
    {
    // Create a DateFormatter object for displaying date in specified format.
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat, Locale.getDefault());
    // Create a calendar object that will convert the date and time value in milliseconds to date.
    Calendar calendar = Calendar.getInstance();
    TimeZone tz = calendar.getTimeZone();
    Date date = new Date(milliSeconds);
    calendar.setTime(date);
    calendar.setTimeZone(tz);
    return formatter.format(calendar.getTime());
}

试试这个:

Date time = null;
try {
    DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
    timeFormat.setTimeZone(TimeZone.getTimeZone("UTC")); // Add this. "GMT" works too.
    String inTime = "12:34:56";
    time = timeFormat.parse(inTime);
}
catch (ParseException e) {
    e.printStackTrace();
    return;
}
// and print with:
Log.e("Test", "TIIIIME: " + time.toGMTString()); // Not toString...

对我来说,这段代码产生:

1 Jan 1970 12:34:56 GMT

相关内容

  • 没有找到相关文章

最新更新