日期格式在 for 循环中花费大量时间

Date format takes lots of time in for loop

我正在遍历一个数组列表并想格式化我从响应中获得的所有时间戳,但我观察到使用 DateFormat 方法转换 12600 条记录大约需要 3 秒,如果我使用 SimpleDateFormat 则需要 2 seconds.Strange !!

但我想减少这个转换时间。

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());
}

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

我不知道静态方法 DateFormat.format(...) - 这是您正在使用的 android 特定 class 吗?

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

您可以尝试在循环之前创建格式对象,请参阅 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,则可以只使用原始日期。

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

问题出在 DateFormat method.Finally,我使用 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());
}