これ、多分?本来の機能のための
public static void main(final String... args)
{
final DateTime d = DateTime.now();
final DateTime d2 = d.minus(Days.days(1)).minus(Minutes.minutes(3));
long start, end;
final int count = 5000;
int i;
start = System.currentTimeMillis();
for (i = 0; i < count; i++)
getFormattedDateDifference(d2, d); // <-- the original implementation
end = System.currentTimeMillis();
System.out.println(end - start);
start = System.currentTimeMillis();
for (i = 0; i < count; i++)
getFormattedDateDifference2(d2, d); // <-- the implementation above
end = System.currentTimeMillis();
System.out.println(end - start);
System.exit(0);
}
383ミリ、鉱山のための150ミリ秒:この単純なmain()
で
private static final Pattern PATTERN = Pattern.compile(", $");
public static String getFormattedDateDifference(final DateTime startDate,
final DateTime endDate)
{
// This variable will ultimately contain the number of days
long days = endDate.getMillis() - startDate.getMillis();
final long hours, minutes;
days /= 60000; // Forget seconds and milliseconds
minutes = days % 60; days /= 60;
hours = days % 24; days /= 24;
final StringBuilder sb = new StringBuilder();
if (days != 0) {
sb.append(days).append(" day");
if (days > 1)
sb.append('s');
sb.append(", ");
}
if (hours != 0) {
sb.append(hours).append(" hour");
if (hours > 1)
sb.append('s');
sb.append(", ");
}
if (minutes != 0) {
sb.append(minutes).append(" minute");
if (minutes > 1)
sb.append('s');
sb.append(", ");
}
return PATTERN.matcher(sb.toString()).replaceFirst("");
}
は、それが倍以上高速化を示しています。
出典
2011-12-15 20:24:28
fge
ミリ秒単位でタイムスタンプを取得して操作するだけでなく、 – fge
どうしたのか気にしない。より安価なもの。私は頻繁にこのメソッドを呼び出す必要があり、そのCPUの豚! – LuxuryMode
もちろん、Javaのカレンダーとスイングの日付形式。 – Stephan