tl; Dr.
Modern yaklaşım java.time sınıflarını kullanır .
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011-03
Eski tarih ve saat sınıflarından kaçının
Modern yol java.time sınıflarıdır. Gibi eski tarih-saat sınıflarıCalendar
kötü tasarlanmış, kafa karıştırıcı ve zahmetli olduğu kanıtlanmıştır.
Dize girişinize uygun özel bir biçimlendirici tanımlayın.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Olarak ayrıştır ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Yıl ve ay ile ilgileniyorsunuz. Java.time sınıfları YearMonth
bu amaç için sınıf içerir .
YearMonth ym = YearMonth.from( zdt );
Gerekirse yıl ve ay sayılarını sorgulayabilirsiniz.
int year = ym.getYear();
int month = ym.getMonthValue();
Ancak toString
yöntem, standart ISO 8601 biçiminde bir dize oluşturur .
String output = ym.toString();
Hepsini bir araya getir.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
Konsola dökümü.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
girdi: Pzt 14 Mar 16:02:37 GMT 2011
zdt: 2011-03-14T16: 02: 37Z [GMT]
ym: 2011-03
Canlı kod
IdeOne.com'da çalışan bu koda bakın .
Dönüştürmek
Eğer varsa gereken bir var Calendar
nesneyi, bir dönüştürebilirsiniz GregorianCalendar
eski sınıflara eklenen kullanarak yeni yöntemler.
GregorianCalendar gc = GregorianCalendar.from( zdt );
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
.
Artık bakım modunda olan Joda-Time projesi java.time'a 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 .
Java.time sınıflarını nereden edinebilirsiniz?
- Java SE 8 ve SE 9 ve üstü
- Dahili.
- Paketlenmiş bir uygulamaya sahip standart Java API'sinin bir parçasıdır.
- 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'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .