Java解析某些日期,即使它们有效

时间:2016-12-07 11:17:42

标签: java android date

我正在处理的应用程序必须解析大量日期才能执行某些计算。它们被从本地SQLite数据库中拉出,并在它们转换为Java对象时进行解析。这在整个应用程序中运行良好,但在一种情况下会导致一些非常不寻常的行为。

正在加载的屏幕检索相当大量的数据(目前用~3k记录进行测试),并且在解析日期的过程中,其中一些被错误地解析,即使日期字符串本身是完全有效。

解析代码如下所示

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

try {
  String dateString = cursor.getString(idx);
  Date d = df.parse(dateString);
  System.out.println("Parsed " + dateString + " into " + d);
} catch (ParseException ex) {
  ex.printStackTrace();
}

这适用于大多数日期,但是一些失败的例子是

Parsed 2016-11-30T10:32:29Z into Wed Nov 30 10:32:28 GMT+00:00 2016
Parsed 2016-11-30T10:48:15Z into Thu Jan 01 01:00:14 GMT+00:00 1970
Parsed 2016-11-30T10:32:30Z into Wed Nov 30 10:32:29 GMT+00:00 2016
Parsed 2016-11-30T10:48:16Z into Fri Jan 01 00:48:15 GMT+00:00 2016
Parsed 2016-11-30T10:32:31Z into Wed Nov 30 10:32:30 GMT+00:00 2016
Parsed 2016-11-30T10:48:17Z into Fri Jan 01 00:48:16 GMT+00:00 2016
Parsed 2016-11-30T10:32:32Z into Wed Nov 30 10:32:31 GMT+00:00 2016
Parsed 2016-11-30T10:32:33Z into Thu Jan 01 01:00:32 GMT+00:00 1970
Parsed 2016-11-30T10:48:18Z into Wed Nov 30 10:48:17 GMT+00:00 2016

正如您所看到的,有许多日期已被完全错误地解析,我很难过为什么。

我唯一能想到的就是线程化。我有两个后台线程,它们将同时调用相同的代码,虽然我不明白为什么它们应该相互干扰。

有没有人知道这里发生了什么,因为我现在已经完全迷失了?

1 个答案:

答案 0 :(得分:-1)

您应该使用semaphore来控制线程访问

Semaphore