2015-09-21 12 views
5

java.time.Instant sınıfının örneklerini Strings dizinine dönüştürmek istiyorum.ISO_INSTANT DateTimeFormatter'ın kolonları kullanmayan özel bir varyantı nasıl oluşturulur?

Tam olarak java.time.format.DateTimeFormatter.ISO_INSTANT gibi bir biçimi kullanmak istiyorum, biçimdeki kolonların atlanması veya değiştirilmemesi arasındaki tek fark, böylece dosya adlarında ve URL'lerde kaçmadan kullanılabilmeleridir.

Örnek: 2011-12-03T10.15.30.001Z yerine 2011-12-03T10 arasında: 15: 30.001Z ISO_INSTANT için

bakınız Javadoc: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT

+0

Muhtemelen önemsiz değil, çünkü ISO_INSTANT java.time.format.DateTimeFormatterBuilder.InstantPrinterParser kullanıyor ve iki nokta üst üste kodlanmış. – Gustave

+3

Daima her zaman input.replace (".", ":"); '... Muhtemelen karmaşık bir tarih formatı kadar iyidir. – assylias

+0

Evet, bu daha iyi bir şey bulana kadar kullanıyorum pragmatik ama çok savunmasız bir çözümdür. – Gustave

cevap

1

Böyle kendi formatlayıcıyı inşa edebileceğini :

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH.mm.ss.SSSVV") 

DateTimeFormatter Javadoc listeleri onların etkiye sahip tüm olası belirteçleri.

+0

Sanırım bu yeterli değil, çünkü ISO_INSTANT her zaman UTC kullanıyor ve gerekmediğinde kısmi saniye içermiyor. – Gustave

+1

DateTimeFormatter.ofPattern ("yyyy-MM-dd'T'HH.mm.ss.SSSV"), java.lang.IllegalArgumentException öğesini atar: Model harfi sayısı 2 olmalıdır: V – Gustave

+2

DateTimeFormatter.ofPattern ("yyyy-MM-dd" T'HH.mm.ss.SSSVV "). Format (Instant.EPOCH) java.time.temporal.UnsupportedTemporalTypeException üretir: Desteklenmeyen alan: YearOfEra – Gustave