1

我有一个带有“错误”格式日期和时间的字符串,我需要将其转换为一个Date对象,以便我可以使用SimpleDateFormat和 current格式化它的内容Locale

但是,无论我如何尝试,我都无法让输出显示正确的时间,我从 PST 时间 (UTC-8) 转换为 GMT,但打印的时间太多了 +1 小时,GMT 只有 +7从(当前 PDT)时区。

我已经在两台 Android 设备上尝试了该代码,一台设置为 GMT,另一台设置为 CET,一个 Android 模拟器,并从命令行运行,它们都弄错了时间。(+1)

我在下面的代码中做错了什么?

    String sourceSDFformatter = "MMM d, h:mm a Z";
    String destSDFformatter = "EEEEE, MMMMM dd, HH:mm";
    String dateString = "Mar 20th, 10:00 AM PST".replaceAll("st|nd|rd|th", "");

    SimpleDateFormat sourceSDF = new SimpleDateFormat(sourceSDFformatter, Locale.US);
    SimpleDateFormat destSDF = new SimpleDateFormat(destSDFformatter, Locale.UK);

    TimeZone sourceTZ = TimeZone.getTimeZone("America/Los_Angeles");
    TimeZone destTZ = TimeZone.getTimeZone("GMT");

    sourceSDF.setTimeZone(sourceTZ);
    destSDF.setTimeZone(destTZ);

    Date myDate = sourceSDF.parse(dateString);
    myDate.setYear(new Date().getYear());

    System.out.println("Your Time: " + destSDF.format(myDate));

输出:

Your Time: Wednesday, March 20, 18:00

当我的预期输出是:Your Time: Wednesday, March 20, 17:00.

我已经在java中将本地时区转换为GMT中尝试了SO答案,如果我更改它会完美运行TimeZone.getTimeZone("America/Los_Angeles"),那么打印的时间提前+7小时是正确的。

4

1 回答 1

3

格式字符串中的Z意味着时区是从 动态设置的,dateString并且格式化程序本身的时区被忽略parse()。由于 dateString 表示PST日期是PST

将 4 位数的年份添加到您的格式中,然后dateString

于 2013-03-20T17:58:59.243 回答