0

所以我试图解析Java中的日期字符串。我得到了正确的时间,但分钟似乎已经过了大约 5 到 10 分钟。我在下面显示我的代码以及输入字符串和日期对象toString()输出。

有什么想法我哪里出错了吗?这是在 Android 上,所以我不想使用 JodaTime。

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'"); 

Date date = sdf.parse(input);

return date;

输入字符串 = 2012-11-07T12:47:05.0581816Z

日期 toString() = 2012 年 11 月 7 日星期三 12:56:46 GMT(毫秒 = 1352293006816)

4

2 回答 2

3

您正在尝试将微秒精度的日期解析为毫秒精度。

0581816 是添加到时间 12:47:05 的毫秒数,而不是您可能期望的秒的小数部分。

由于毫秒以下的精度不能用 表示java.util.Date,最简单的选择是截断小数部分并调整日期格式,如下所示:

final DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String input = "2012-11-07T12:47:05.058234234Z";
input = input.replaceFirst("(?<=\\.\\d{3})\\d+", "");
System.out.println(input);
System.out.println(sdf.parse(input));
于 2012-11-07T13:12:26.763 回答
1

请确保在将字符串转换为日期对象时使用相同的时区,反之亦然

于 2012-11-07T13:20:18.350 回答