日期格式在 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());
}
我正在遍历一个数组列表并想格式化我从响应中获得的所有时间戳,但我观察到使用 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());
}