Календарь - очень дорогой объект (один из самых дорогих объектов даты в любой библиотеке, которую я знаю).Вызов getInstance () тоже очень дорогой.Если вам нужно использовать Календарь, вы можете посмотреть на его кэширование.Это действительно зависит от того, зачем вам это нужно.
Самый эффективный способ получить и сохранить текущее время - использовать длинный примитив.
long currentDateTime = System.currentTimeMillis();
Если вы используете время по Гринвичу внутри, вы можетесохранить текущий день с
int currentDay = (int)(System.currentTimeMillis() / 86400000);
РЕДАКТИРОВАТЬ: стоит проверить на вашей машине, в то время как getInstance () является относительно дорогим, но все еще довольно быстро.На моей старой коробке это занимает ~ 20 микросекунд.На быстрой машине currentTimeMillis () может занять 140 наносекунд.
Следующие отпечатки
Calendar.getInstance() took on average 20088 ns. java.util.GregorianCalendar[time=1294086899359 ... deleted ...]
System.currentTimeMillis() took on average 938 ns. 1294086899377
код
int runs = 10000;
long start = System.nanoTime();
Calendar cal = null;
for(int i=0;i<runs;i++)
cal = Calendar.getInstance();
long time = System.nanoTime() - start;
System.out.println("Calendar.getInstance() took on average "+time/runs+" ns. "+cal);
long start2 = System.nanoTime();
long now = 0;
for(int i=0;i<runs;i++)
now = System.currentTimeMillis();
long time2 = System.nanoTime() - start2;
System.out.println("System.currentTimeMillis() took on average "+time2/runs+" ns. "+now);