日期格式在for循环中占用大量时间

时间:2015-01-14 16:35:05

标签: java android performance

我正在遍历一个arraylist并希望格式化我从响应中获得的所有时间戳,但我发现使用DateFormat方法转换12600条记录需要大约3秒钟,如果我使用SimpleDateFormat则需要2秒。转换!!

但我希望减少转换时间。

ArrayList<String> timestampsList = new ArrayList<String>();
Calendar cal = Calendar.getInstance();

for(int i=0;i< arraylist.size();i++) {
    cal.setTimeInMillis(arraylist.getTimeStamp());
    timestampsList.add(DateFormat.format("kk:mm", cal).toString());
}

任何帮助将不胜感激!感谢

2 个答案:

答案 0 :(得分:0)

我不知道静态方法DateFormat.format(...) - 这是你正在使用的特定于Android的类吗?

但我会假设该实现为您指定的模式创建了一个新的格式对象,并使用它来格式化给定的日历。

您可以尝试在循环之前创建格式对象,请参阅SimpleDateFormat,然后在循环中使用它。

int size = arraylist.size();
String[] timestampsList = new String[size];
java.text.DateFormat format = SimpleDateFormat("kk:mm");

for(int i = 0; i < size; i++) {
    Date date = arraylist.get(i).??? ;
    timestampsList[i] = format.format(date);
}

请注意,您创建的格式对象不应在线程之间共享,因此请勿存储在静态字段中。

另请注意,日历计算也可能是计算密集型的,可能会减慢速度,但如果直接使用SimpleDateFormat,则可以使用原始日期。

您可能还需要在格式对象上设置时区。

答案 1 :(得分:0)

问题出在DateFormat方法中。最后,我使用Joda-Time库来转换我的日期,仅花费了612毫秒。令人敬畏的改进。

// this one took 612 ms to convert 12600 records   
Joda-Time library 2.3 version

private static final DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("kk:mm");
private static DateTime dateTime = new DateTime();

public String getFormattedLabel(long timeStamp) {
    dateTime = dateTime.withMillis(timeStamp);
    return dateTime.toString(dateTimeFormatter);
}

并像 - :

一样使用它
ArrayList<String> timestampsList = new ArrayList<String>();
Calendar cal = Calendar.getInstance();

for(int i=0;i< arraylist.size();
    timestampsList.add(getFormattedLabel(arraylist.getTimeStamp());
}