我正在遍历一个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());
}
任何帮助将不胜感激!感谢
答案 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());
}