2012-01-05 31 views
72

Bir dize LocalDate nasıl dönüştürebilirim?Yerel dize için dize

ben gibi örnekler gördük:

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

Ama dizeleri gibidir: Sen LOCALDATE için DateTime gitmek gerekebilir

2005-nov-12 

cevap

62

, sen DateTimeFormatter kullanmalısınız:

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

Java 8 veya üstü kullanıyorsanız, o zaman org.joda.time.format.DateTimeFormatter class tarafından gerçekleştirilir hertzi's answer

+1

+1 eksik eski sürümlerini kullanırken bu mükemmeldir. –

+1

Oops ... Sabit, teşekkürler (daha fazla okumayı öğretecek) – fge

+0

Ayrıca "yyyy-MMM-dd" biçimi için bir düzenleme gönderdik. YYYY, dönemin yılıdır ve (daha alçakgönüllü) DD, yılın bir günüdür. –

10

. Eğer Joda Zaman kullanırken

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

Teşekkürler. Kullanıcının 3 harfli ay aramasına rağmen DateTimeFormatter.parseLocalDate() işlevini kullanmak için LocalDate.parse ve DateTimeFormatter.parseLocalDate öğesinden – thedarklord47

6

tarih saat biçimlendirme bakın . Üç sınıf biçimlendiricileri oluşturmak için fabrika yöntemlerini sağlar ve bu birdir. Diğerleri ISODateTimeFormat ve DateTimeFormatterBuilder'dur.

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

final org.joda.time.LocalDate class bir zaman diliminde olmayan bir tarih temsil değişmez bir tarih saat sınıfıdır. Chronology da LocalDateiş parçacığı için güvenli ve değiştirilemez olduğunu. Sağlanan tüm standart Chronology sınıfları, diş güvenli ve değişmezdir.

132

Java 1.8 olduğundan, ekstra bir kütüphaneye olmadan bunu başarabilirsiniz:

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 olsa neredeyse aynıdır.

+0

java.time.format.DateTimeParseException: '2005-nov-12' metni 5 –

+3

dizininde ayrıştırılamadı Bu, varsayılan yerel ayarınızın 'N' değerinin 'N' büyük harf olmasını beklemesi nedeniyle olur. – hertzi

+0

Bu yaklaşım hakkında daha fazla tartışma için benzer bir soruya [yanıtım] (http://stackoverflow.com/a/38904830/642706) bakın. –