2015-03-09 21 views
13

Soruma ilişkin soru here - nasıl özgün pattern alacağım DateTimeFormatter verilen dize?Orijinal kalıbı alın Bir JDK 8 verilen dizge DateTimeFormatter?

+1

@KevinWorkman JDK 8 DateTimeFormatter sınıfı ile ilgili olarak, yinelenen bir yineleme değil, joda zaman sınıfı – bowmore

+0

@bowmore JDK 8 DateTimeFormatter sınıfı, JodaTime DateTimeFormatter sınıfına dayanıyordu. Bu sorunun cevabı, bu sorunun cevaplarıdır. –

+2

@KevinWorkman Biri diğerine ilham verdi, onları aynı yapmadı. Davranışları çeşitli şekillerde farklıdır. Yine de, cevaplar aynı olsa da, bu soru sorulan kişi, ikisi arasındaki ilişkiden habersiz olabileceği için, soru bir kopya değildir. – bowmore

cevap

7

on the mailing list diye sorulmuştur ve yanıt, orijinal desen korunmadığından mümkün olmamasıdır.

Aynı iş parçacığı, bilgileri içeren bir DateTimeFormatterBuilder kullanılmasını önerir.

+0

Ben DateTimeFormatterBuilder' yerelleştirilmiş biçim oluşturmak için izin verir, ancak yanlış değilim, "DateTimeFormatter" nesnesini oluşturmak için kullanılan kesin biçimi tam olarak vermiyor. –

+0

@RohitJain Muhtemelen durum budur - javadoc orijinal kalıbı geri verme sözü vermez. – assylias

1

Sorunuza doğrudan bir yanıt olmayabilir, ancak yardımcı olabilir.

bunu biçimlendirici statik yöntemini çağırabilirsiniz inşasının parametrelerini biliyorsanız:

DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)

Bu, bir dize olarak desen verecektir.

+0

Ya da daha basitçe: '((SimpleDateFormat) DateFormat.getDateInstance (DateFormat.SHORT, Locale.FRENCH)) toPattern() – qwertzguy

2

Basit veya zarif bir çözüm değil, ancak DateTimeFormatter'un .toString() yönteminin sonuçlarını kullanarak, sonuçta oluşan Dizeyi ayrıştırarak kendi orijinal desenini yeniden oluşturan kendi kodunuzu döndürmek mümkün olabilir.

çeşitli modelleri için bir kaç .toString() sonuçlarını yazdırır Bazı kod:

java.time.format.DateTimeFormatter variousFormatPatterns = 
    java.time.format.DateTimeFormatter.ofPattern("yy MM dd"); 
System.out.println("Test 1: " + variousFormatPatterns.toString()); 

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yy-MM-dd"); 
System.out.println("\nTest 2: " + variousFormatPatterns.toString()); 

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yyMMdd"); 
System.out.println("\nTest 3: " + variousFormatPatterns.toString()); 

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss"); 
System.out.println("\nTest 4: " + variousFormatPatterns.toString()); 

Sonuçları (boşluk/tire/eğik çizgi/kolon ayraç karakterlerinden tutulmasını dikkat edin):

Testi 1: İndirgenmişDeğer (YearOfEra, 2,2,2000-01-01) '' Değer (MonthOfYear, 2) '' Değer (DayOfMonth, 2)

Test 2: ReducedValue (YearOfEra, 2,2,2000-01-01) '-' Değer (MonthOfYear, 2) '-' Değer (DayOfMonth, 2)

Test 3: ReducedValue (YearOfEra, 2,2,2000-01-01) Değer (MonthOfYear, 2) değer (DayOfMonth, 2)

Test 4: Değer (MonthOfYear, 2) '/' değer (DayOfMonth, 2) '/' Değeri (YearOfEra, 4,19, EXCEEDS_PAD) 'Değeri (HOUROFDAY, 2)': 'Değeri (MinuteOfHour, 2)':' Değeri (SecondOfMinute, 2)

Bu yaklaşımı uygulamak, kodu java.time.format.DateTimeFormatterBuilder'da incelemeyi gerektirir. appendPattern(String pattern) yöntemi için JavaDoc özellikle yararlı görünüyor. Yalnızca birkaç tür kalıpla çalıştığınızı biliyorsanız, bazı kısayollar alabilirsiniz. DateTimeFormatterBuilder kodu ile hızlı bir göz atıldığında

, muhtemelen gibi Value, ReducedValue, Fraction vb gelecekteki Java sürümleri haber verilmeksizin değiştirebilir Strings olarak çözümün bu tip güvenerek bir risk olacaktır.

İlgili konular