我已经在 SO 上阅读了很多关于 Joda Time 的帖子,现在我终于下载并试了一下。
Gareth Davis 的回答已经被接受,我对此没有异议。但我很想知道 Joda Time 的不同之处在哪里。
根据问题和接受的答案,我做了一个类来比较JDK Calendar和Joda Time Chronology的执行时间。
我发现 Calendar 实现始终运行得更快,而不是快两倍。
import java.util.Calendar;
import java.util.Date;
import org.joda.time.Chronology;
import org.joda.time.chrono.ISOChronology;
public class CalendarTest {
private static final int ITERATIONS = 1000000;
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
jdkCalendar();
jodaChronology();
}
}
private static void jdkCalendar() {
long start = System.currentTimeMillis();
Calendar c = Calendar.getInstance();
int hourOfDay = 0;
int dayOfMonth = 0;
int weekOfYear = 0;
int month = 0;
int year = 0;
for (int i = 0; i < ITERATIONS; i++) {
c.setTimeInMillis(System.currentTimeMillis());
hourOfDay = c.get(Calendar.HOUR_OF_DAY);
dayOfMonth = c.get(Calendar.DAY_OF_MONTH);
weekOfYear = c.get(Calendar.WEEK_OF_YEAR);
month = c.get(Calendar.MONTH);
year = c.get(Calendar.YEAR);
}
long duration = System.currentTimeMillis() - start;
System.err.printf("jdk: duration %d, hourOfDay: %d, dayOfMonth: %d, weekOfYear: %d, month: %d, year: %d\n", duration, hourOfDay, dayOfMonth, weekOfYear, month, year);
}
private static void jodaChronology() {
long start = System.currentTimeMillis();
Chronology chronology = ISOChronology.getInstanceUTC(); // This can be static
int hourOfDay = 0;
int dayOfMonth = 0;
int weekOfYear = 0;
int month = 0;
int year = 0;
for (int i = 0; i < ITERATIONS; i++) {
long msSinceEpoch = System.currentTimeMillis();
hourOfDay = chronology.hourOfDay().get(msSinceEpoch);
dayOfMonth = chronology.dayOfMonth().get(msSinceEpoch);
weekOfYear = chronology.weekOfWeekyear().get(msSinceEpoch);
month = chronology.monthOfYear().get(msSinceEpoch);
year = chronology.years().getValue(msSinceEpoch);
}
long duration = System.currentTimeMillis() - start;
System.err.printf("joda: duration %d, hourOfDay: %d, dayOfMonth: %d, weekOfYear: %d, month: %d, year: %d\n", duration, hourOfDay, dayOfMonth, weekOfYear, month, year);
}
}
样本输出:
jdk: duration 1714, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 2099, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 377, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 689, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 340, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 680, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 330, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 653, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 326, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 596, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 337, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 620, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 471, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 590, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 326, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 591, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 336, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 595, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41
jdk: duration 327, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 5, year: 2011
joda: duration 560, hourOfDay: 12, dayOfMonth: 24, weekOfYear: 25, month: 6, year: 41