tl; dr
LocalDate.parse(
"01-23-2017" ,
DateTimeFormatter.ofPattern( "MM-dd-uuuu" )
)
Detaylar
Yyyy-aa-gg biçiminde bir java.util.Date var
Diğer belirtildiği gibi, Date
sınıfın bir formatı yoktur. UTC'de 1970'in başından bu yana bir milisaniye sayısı vardır. Koşulsuz.
java.time
Diğer Cevaplar, artık java.time sınıfları tarafından değiştirilen, zahmetli eski eski tarih-saat sınıflarını kullanır.
java.util.Date
Bir Instant
nesneye sahipseniz , nesneye dönüştürün . Instant
Sınıfı zaman çizelgesinde bir anı temsil UTC çözünürlüğe sahip nanosaniye (ondalık kesir dokuz (9) haneye kadar).
Instant instant = myUtilDate.toInstant();
Saat dilimi
Diğer Cevaplar, önemli saat dilimi sorununu görmezden gelir. Bir tarih belirlemek, bir saat dilimi gerektirir. Herhangi bir an için tarih, dünya genelinde bölgeye göre değişir. Paris'te gece yarısından birkaç dakika sonra Fransa yeni bir gün, Montréal Québec'te ise hala “dün”.
Bağlamını istediğiniz zaman dilimini tanımlayın Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Uygula ZoneId
bir olsun ZonedDateTime
.
ZonedDateTime zdt = instant.atZone( z );
LocalDate
Günün saati olmadan yalnızca tarihi önemsiyorsanız, a LocalDate
.
LocalDate localDate = zdt.toLocalDate();
Standart ISO 8601 biçiminde (YYYY-AA-GG) bir dize oluşturmak için çağırmanız yeterlidir toString
. Java.time sınıfları, dizeleri oluştururken / ayrıştırırken varsayılan olarak standart biçimleri kullanır.
String output = localDate.toString();
2017-01-23
AA-GG-YYYY biçimi istiyorsanız, bir biçimlendirme modeli tanımlayın.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" );
String output = localDate.format( f );
Biçimlendirme deseni kodlarının büyük / küçük harfe duyarlı olduğunu unutmayın. Soru'daki kod (yılın ayı mm
) yerine yanlış kullanıldı (saatin dakikası MM
).
DateTimeFormatter
Ayrıştırma için aynı nesneyi kullanın . Java.time sınıfları iş parçacığı açısından güvenlidir, bu nedenle bu nesneyi etrafta tutabilir ve iş parçacıkları arasında bile tekrar tekrar kullanabilirsiniz.
LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
Java.time hakkında
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
.
Şu anda bakım modunda olan Joda-Time projesi, java.time sınıflarına geçişi tavsiye ediyor .
Daha fazla bilgi edinmek için Oracle Eğitimi'ne bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .
Java.time derslerini nereden edinebilirim?
- Java SE 8 ve SE 9 ve üstü
- Yerleşik.
- Paket bir uygulamaya sahip standart Java API'sinin bir parçası.
- Java 9, bazı küçük özellikler ve düzeltmeler ekler.
- Java SE 6 ve SE 7
- Android
ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time uygulamasına gelecekteki olası eklemeler için kanıtlayıcı bir zemindir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .