Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDataFormat分析返回错误的日期_Java_Date - Fatal编程技术网

Java SimpleDataFormat分析返回错误的日期

Java SimpleDataFormat分析返回错误的日期,java,date,Java,Date,我使用SimpleDataFormat来解析字符串。以下是一个例子: private static final SimpleDateFormat longStringFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); [some code here] Date dirDate = longStringFormat.parse("2014-04-03T06:00:00.376542900Z"); 当我在调试模式下检查dir

我使用SimpleDataFormat来解析字符串。以下是一个例子:

private static final SimpleDateFormat longStringFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
[some code here]
Date dirDate = longStringFormat.parse("2014-04-03T06:00:00.376542900Z");
当我在调试模式下检查dirDate或打印它时,我得到的日期是2014年4月7日星期一14:35:42


为什么我会得到这样的补偿?它不能算作时区偏移(尽管应用偏移似乎已经是错误的)。如何获取与字符串描述完全相同时间的日期对象?

问题是,您指定的是毫秒数:376542900。这是104小时35分42秒900毫秒。。。这就是问题所在

不幸的是,
SimpleDateFormat
似乎无法理解您给它的是“几分之一秒”而不是“毫秒数”。我强烈怀疑(尽管我还没有尝试过)Java8会正常工作(可能使用更长的模式),Joda Time也可能会处理它——这两个选项中有一个吗?否则,您将需要使用字符串操作将字符串转换为更易于管理的形式


(顺便说一句,您还应该将
SimpleDataFormat
的时区设置为UTC,因为这是本文中指定的。)

请不要假设Java是错误的。SSS代表毫秒值,而不是几秒钟。@SotiriosDelimanolis=))我不认为它们是错误的,我认为我没有正确理解它。也许这就是错误所在。对于我的案例,您建议使用什么格式的字符串?如果您需要微秒,这里有一个解决方法:它们都不是选项。除了.substring()或.split()之外的其他建议?@Dragos:基本上,我会使用
substring
来去除多余的数字。更准确地说,SimpleDataFormat无法处理微秒。如果您将其减少到小数点后3位,这很好(尽管可能会导致时间值不太准确),您可以使用
Timestamp
这样的答案:@staticx:在这种情况下,它不仅仅是微秒,而是纳秒。我假设Dragos只是想解析该值,并获得较低的准确性
Date