读取"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ"时java.text.SimpleDateFormat的输出错误

Her*_*ang 4 java formatter simpledateformat

我试图通过使用java.text.SimpleDateFormat将String格式的日期转换为java.util.Date,但是它没有给我正确的输出.请帮忙!

我的输入是由Django date生成的:ex."2014-01-20T07:17:06.150995 + 00:00"

但是,我得到了"Mon Jan 20 15:19:36 GMT + 08:00 2014"而不是"Mon Jan 20 15:17:06 GMT + 08:00 2014"

这是我的测试代码:

String s = "2014-01-20T07:17:06.150995+00:00";

SimpleDateFormat sdf;
String fmt = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ";
sdf = new SimpleDateFormat(fmt, Locale.US);

String result = "";
try {
    Date date = sdf.parse(s);
    Log.d(Constants.LOG_TAG, date.toString());
    result = date.toString();
} catch (Exception e) {
    Log.d(Constants.LOG_TAG, "date formatting error" + e.getMessage());
}
Log.d(Constants.LOG_TAG, "date test >> " + result);
Run Code Online (Sandbox Code Playgroud)

Kep*_*pil 6

如您所见,您的两个日期相差2.5分钟.

发生这种情况是因为您将微秒解析为毫秒.这将为您的结果添加150000毫秒,或2.5分钟.

没有标准的方法来解析使用微秒的日期字符串,SimpleDateFormat如果您不能以不同的格式获取源字符串,则必须自己完成.

如果日期始终采用这种格式,您可以执行以下操作:

String dateWithoutMicros = s.substring(0, s.length() - 9) + s.substring(s.length() - 6);
Date date = sdf.parse(dateWithoutMicros);
Run Code Online (Sandbox Code Playgroud)