“星期五,2014年9月12日05:00:23 GMT”,SimpleDateFormat出了什么问题?

时间:2014-09-12 05:04:56

标签: android datetime time timezone simpledateformat

“星期五,2014年9月12日05:00:23 GMT”,SimpleDateFormat出了什么问题?

SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.parse(dateString);
format:    "EEE, dd MMM yyyy HH:mm:ss 'GMT'"
dateString:"Fri, 12 Sep 2014 05:00:23 GMT"

怎么了?

2 个答案:

答案 0 :(得分:2)

假设您的问题是日期错误,时区的SimpleDateFormat转换说明符为z而不是'GMT'(尽管您可以使用Z和{其他两个变体分别为{1}},分别为RFC822和ISO8601。

使用您的说明符,我得到本地时间凌晨5点。如果我在我的代码中使用正确的说明符,它可以正常工作:

X

该计划的输出(对于西澳大利亚州珀斯,即UTC + 8)正如预期的那样:

import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    public static void main (String[] args) {
        String format = "EEE, dd MMM yyyy HH:mm:ss z";
        String date = "Fri, 12 Sep 2014 05:00:23 GMT";
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            Date dt = sdf.parse(date);
            System.out.println(dt);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

有关详细信息,请参阅SimpleDateFormat online documentation

如果仍有问题,请尝试从格式和日期字符串中删除单个项目,直到它开始工作。一旦您建立了有问题的格式说明符,就会更容易追踪。

答案 1 :(得分:0)

在您的模式中使用“z”因为GMT不仅仅是文字,而是必须被解释为时区偏移UTC + 00:00。并将语言环境设置为英语,因为您有英文缩写的星期和月份:

String format = "EEE, dd MMM yyyy HH:mm:ss z";
String date = "Fri, 12 Sep 2014 05:00:23 GMT";
SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.ENGLISH);