System.currentTimeMillis()
jest oczywiście najbardziej wydajny, ponieważ nawet nie tworzy obiektu, ale new Date()
tak naprawdę jest tylko cienkim opakowaniem o długim, więc nie jest daleko w tyle. Calendar
z drugiej strony jest stosunkowo powolny i bardzo złożony, ponieważ musi poradzić sobie ze znacznie złożonością i wszystkimi osobliwościami związanymi z datami i godzinami (lata przestępne, czas letni, strefy czasowe itp.).
Zasadniczo dobrym pomysłem jest radzenie sobie tylko z długimi znacznikami czasu lub Date
obiektami w aplikacji i używanie ich tylko Calendar
wtedy, gdy faktycznie trzeba wykonać obliczenia daty / godziny lub sformatować daty w celu wyświetlenia ich użytkownikowi. Jeśli musisz dużo tego zrobić, użycie Joda Time jest prawdopodobnie dobrym pomysłem, aby uzyskać czystszy interfejs i lepszą wydajność.
Patrząc na JDK, najbardziej wewnętrzny konstruktor
Calendar.getInstance()
ma to:więc już automatycznie robi to, co sugerujesz. Domyślny konstruktor daty zawiera to:
Tak więc naprawdę nie trzeba specjalnie obliczać czasu systemowego, chyba że chcesz zrobić z nim matematykę przed utworzeniem za jej pomocą obiektu Kalendarz / Data. Muszę też zalecić użycie joda-time jako zamiennika własnych klas kalendarza / daty w Javie, jeśli twoim celem jest częsta praca z obliczeniami dat.
źródło
Jeśli korzystasz z randki, zdecydowanie zalecamy korzystanie z jodatime, http://joda-time.sourceforge.net/ . Używanie
System.currentTimeMillis()
pól, które są datami, wydaje się bardzo złym pomysłem, ponieważ skończy się to niepotrzebnym kodem.Zarówno data, jak i kalendarz są poważnie zepsute, a Kalendarz jest zdecydowanie najgorszym ze wszystkich.
Radzę, abyś używał go,
System.currentTimeMillis()
gdy faktycznie pracujesz z milisekundami, na przykład w ten sposóbźródło
Wolę użyciu wartości zwracanych przez
System.currentTimeMillis()
wszelkiego rodzaju obliczeń i tylko użyćCalendar
lubDate
jeśli muszę naprawdę wyświetlić wartość, która jest odczytywana przez ludzi. Zapobiegnie to również 99% błędów związanych z czasem letnim. :)źródło
Na mojej maszynie próbowałem to sprawdzić. Mój wynik:
Nie zapomnij o GC (jeśli używasz
Calendar.getInstance()
lubnew Date()
)źródło
W zależności od aplikacji możesz rozważyć użycie
System.nanoTime()
zamiast tego.źródło
nanoTime
powraca, jest względny (zwykle do początku programu) i byłby nonsensem, gdybyś próbował zamienić go w datę.Próbowałem tego:
I wynik był:
Data (): 199
currentTimeMillis (): 3
źródło
System.currentTimeMillis()
jest oczywiście najszybszy, ponieważ jest to tylko jedno wywołanie metody i nie jest wymagane zbieranie śmieci.źródło