我无法将时间字符串转换为准确的日期对象表示
我正在与之通信的服务器将提供UTC时间值,例如此。
2013-01-02T05:32:02.8358602Z
当我尝试以下代码时,我最终得到的毫秒计数比预期的UTC提前了近2小时15分钟。
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());
inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = inputFormat.parse("2013-01-02T05:32:02.8358602Z");
我做错了什么
答案 0 :(得分:0)
问题是,如果millis = 8358602 ms,SimpleDateFormat需要8358602不是一小部分,那么它就是数字。默认情况下,SimpleDateFormat处于“宽松”模式,这就是它接受8358602的原因,它也会接受99天的字段并且会移动额外的日期字段,依此类推。如果你在SimpleDateFormat.setLenient(true)上打开严格模式,你将得到ParseException,因为millis的最大值是999.
我可以提供解决方法。您的日期是W3C XML Schema 1.0日期/时间格式,小数秒。对于这种情况,您需要javax.xml.datatype.XMLGregorianCalendar。这工作
DatatypeFactory dtf = DatatypeFactory.newInstance();
XMLGregorianCalendar c = dtf.newXMLGregorianCalendar("2013-01-02T05:32:02.8358602Z");
System.out.println(c.toGregorianCalendar().getTime());
并打印
Wed Jan 02 07:32:02 EET 2013
请注意,EET是GMT + 2
答案 1 :(得分:-1)
试试这个:
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date d = format.parse(fileDate);
必须在 SimpleDateFormat()构造函数中指定正确的格式。
编辑:
public String getconvertdate1(String date)
{
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
DateFormat outputFormat = new SimpleDateFormat("dd MMM yyyy");
Date parsed = null; // should not be initialized first else current date will be printed in case of a parse exception
try
{
parsed = inputFormat.parse(date);
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
String outputText = outputFormat.format(parsed);
return outputText;
}
并使用上述方法尝试此格式:EEE MMM dd HH:mm:ss zzz yyyy