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.