tl; Dr.
mevcut "en iyi uygulamayı" tavsiye eder DateveCalendar
en iyisi her zaman lehine olan CalendaraşırıDate
Bu eski sınıflardan tamamen kaçının . Kullanım java.time yerine sınıfları.

ayrıntılar
Ortomala tarafından cevap Lokni çağdaş kullanarak önermek doğru java.time oldukça zahmetli eski eski tarih-saat sınıfları (daha sınıflar Date, Calendarvb.) Ancak bu Cevap yanlış sınıfı eşdeğer olarak önermektedir (bu Cevap hakkındaki yorumuma bakın).
Java.time kullanma
Java.time sınıfları , eski tarih-saat sınıfları, gece ve gündüz farkı üzerinde büyük bir gelişmedir. Eski sınıflar kötü tasarlanmış, kafa karıştırıcı ve zahmetlidir. Mümkün olduğunca eski sınıflardan kaçınmalısınız. Ancak eski / yeniye / yenisinden dönüştürmeniz gerektiğinde, eski sınıflara eklenen yeni yöntemleri çağırarak bunu yapabilirsiniz .
Dönüştürme hakkında daha fazla bilgi için, başka bir Soruya cevap ve nifty şemasına bakın , java.util'i dönüştürün. .
Yığın Taşması aranması, java.time kullanımıyla ilgili yüzlerce örnek Soru ve Cevap verir. Ama işte kısa bir özet.
Instant
Mevcut anı bir ile alın Instant. InstantSınıfı zaman çizelgesinde bir anı temsil UTC çözünürlüğe sahip nanosaniye (ondalık kesir dokuz (9) haneye kadar).
Instant instant = Instant.now();
ZonedDateTime
Aynı anda , belirli bir bölgenin duvar saati süresinin merceğinden aynı anda görmek için , bir saat dilimi ( ZoneId) uygulayın ZonedDateTime.
Saat dilimi
Bir belirtme uygun bir zaman dilimi adı biçiminde continent/regiongibi America/Montreal, Africa/Casablancaya da Pacific/Auckland. Hiçbir zaman gibi 3-4 harfli bir kısaltma kullanın ESTveya ISToldukları gibi değil , gerçek zaman dilimleri, değil standardize ve hatta benzersiz değil (!).
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone();
dengelemek
Saat dilimi, bir bölgenin UTC'den uzaklığındaki değişiklik geçmişidir . Ama bazen sadece tam bölge olmayan bir ofset verilir. Bu durumda OffsetDateTimesınıfı kullanın .
ZoneOffset offset = ZoneOffset.parse( "+05:30" );
OffsetDateTime odt = instant.atOffset( offset );
Bir zaman diliminin kullanılması, sadece bir ofsetin kullanılması tercih edilir.
LocalDateTime
Local…Sınıflardaki “Yerel” , belirli bir yer değil, herhangi bir yer anlamına gelir . Yani adı karşı sezgisel olabilir.
LocalDateTime, LocalDateve LocalTimeofset veya saat dilimi hakkında herhangi bir bilgi içermemesi. Onlar do Yani değil gerçek anları temsil, bunlar değil puan cetvelinde. Şüphe veya karmaşa, kullandığınızda ZonedDateTimeyerine LocalDateTime. Daha fazla tartışma için Yığın Taşması'nda arama yapın.
Teller
Tarih ve saat nesnelerini, değerlerini temsil eden dizelerle sınırlamayın. Bir tarih-saat nesnesi almak için bir dizeyi ayrıştırabilir ve bir tarih-saat nesnesinden bir dize oluşturabilirsiniz. Ama dize asla tarih-zamanın kendisi değildir.
Java.time sınıflarında varsayılan olarak kullanılan standart ISO 8601 biçimleri hakkında bilgi edinin .
Hakkında java.time
Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date, Calendar& SimpleDateFormat.
Artık bakım modunda olan Joda-Time projesi java.time sınıflarına geçişi tavsiye ediyor .
Daha fazla bilgi için Oracle Eğiticisine bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .
JDBC 4.2 veya sonraki bir sürümüyle uyumlu bir JDBC sürücüsü kullanarak , java.time nesnelerini doğrudan veritabanınızla değiştirebilirsiniz. Dizelere veya java.sql. * Sınıflarına gerek yoktur.
Java.time sınıflarını nereden edinebilirsiniz?

ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval, YearWeek, YearQuarter, ve daha .