LocalDate dizesi


102

Bir dizeyi a'ya nasıl dönüştürebilirim LocalDate?

Gibi örnekler gördüm:

LocalDate dt = new LocalDate("2005-11-12");

Ama dizelerim şöyle:

2005-nov-12

Yanıtlar:


78

Joda Time'ı kullanırken şunları kullanmalısınız DateTimeFormatter:

final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);

Java 8 veya sonraki bir sürümünü kullanıyorsanız, hertzi'nin cevabına bakın


Ayrıca "yyyy-MMM-gg" formatı için bir düzenleme gönderildi. YYYY çağın yılıdır ve (daha kötü bir şekilde) DD yılın günüdür.
— Spencer Kormos

cevap biraz yanlış ... joda zamanı için kullanılacak sınıf DateTimeFormat, DateTimeFormatter değil. Başka bir deyişle, DateTimeFormat.ofPattern ("yyyy-MM-dd"). ParseLocalDate (Girdiiniz);
— Dan Haywood

188

java.time

Java 1.8'den beri, java.time sınıflarını kullanarak bunu fazladan bir kitaplık olmadan gerçekleştirebilirsiniz . Öğreticiye bakın .

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
formatter = formatter.withLocale( putAppropriateLocaleHere );  // Locale specifies human language for translating, and cultural norms for lowercase/uppercase and abbreviations and such. Example: Locale.US or Locale.CANADA_FRENCH
LocalDate date = LocalDate.parse("2005-nov-12", formatter);

Sözdizimi neredeyse aynıdır.


java.time.format.DateTimeParseException: '2005-nov-12' metni, dizin 5'te ayrıştırılamadı
— Atte Juvonen

3
Bunun nedeni, varsayılan Yerel Ayarınızın "Kasım" ın "N" harfinin büyük harf olmasını beklemesidir.
— hertzi

Bkz benim Answer bu yaklaşımın daha tartışma için de benzer bir soru.
— Basil Bourque

14

DateTime'dan LocalDate'e gitmeniz gerekebilir.

Joda Time Kullanımı:

DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();

2
Bu cevabın Java SE'ye değil Joda'ya atıfta bulunduğunu unutmayın.
— Davids

9

Tarih saat biçimlendirmesi org.joda.time.format.DateTimeFormatter class,. Üç sınıf, biçimlendiriciler oluşturmak için fabrika yöntemleri sağlar ve bu bir tanesidir. Diğerleri ISODateTimeFormatve DateTimeFormatterBuilder.

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);

final org.joda.time.LocalDate classsaat dilimi olmayan bir tarihi temsil eden değişmez bir tarih saat sınıfıdır . Kronolojinin de olması koşuluyla LocalDate, iş parçacığı açısından güvenli ve değişmezdir . Sağlanan tüm standart Kronoloji sınıfları iş parçacığı için güvenli ve değişmezdir.


1

DateTimeFormatter doğrudan bir karakter dizisini ayrıştırmak için kullanılabilen yerleşik formatlara sahiptir. Büyük / küçük harfe duyarlıdır, Kasım işe yarayacaktır ancak nov ve NOV çalışmayacaktır:

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MMM-dd");

try {
    LocalDate datetime = LocalDate.parse(oldDate, pattern);
    System.out.println(datetime); 
} catch (DateTimeParseException e) {
    // DateTimeParseException - Text '2019-nov-12' could not be parsed at index 5
    // Exception handling message/mechanism/logging as per company standard
}

DateTimeFormatterBuilderbiçimlendirici oluşturmak için özel bir yol sağlar. Büyük / Küçük Harfe Duyarlı Değildir, Kas, Kas ve NOV aynı şekilde değerlendirilecektir.

DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
        .append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
    LocalDate datetime = LocalDate.parse(oldDate, f);
    System.out.println(datetime); // 2019-11-12
} catch (DateTimeParseException e) {
     // Exception handling message/mechanism/logging as per company standard
}

1
SO'ya hoş geldiniz, katkılarınız için teşekkür ederiz! Lütfen cevabınızı düzenleyin ve biraz daha fazla açıklama sağlayın, sorunun soruyla nasıl ilişkili olduğu, çözümünüzü nereden aldınız, neden çalışıyor? Daha fazla yardım için stackoverflow.com/help/how-to-answer
— B - rian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.