カレンダーは非常に高価なオブジェクトです(私が知っているライブラリで最も高価な日付オブジェクトの1つです)。 getInstance()の呼び出しも非常に高価です。カレンダーを使用する必要がある場合は、キャッシュすることができます。それは本当にあなたがそれを必要とする理由にかかっています。
現在の時刻を取得して保存する最も効率的な方法は、長いプリミティブを使用することです。
long currentDateTime = System.currentTimeMillis();
あなたが内部的にGMT時間を使用する場合は、あなたが
int currentDay = (int)(System.currentTimeMillis()/86400000);
EDITで、当日保存することができます:の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);
FWIW、カレンダーはシングルトンではありません。私は、あなたやOPが暗示していたものであるとは確信していませんが、同じ質問でCalendarとgetInstanceの両方を一緒に言及して考えると、 – Tom