2016-04-05 18 views
-1

ISO 8601 String oluşturmak için JodaTime kullanıyorum.java JodaTime kaldır saniyeler

2016-04-06T06:59:59.999Z 

Ancak, ben/kesmek saniye ve milisaniye kaldırmak istiyorum:

DateTime jodatime = new DateTime(2016, 04, 05, 23, 59, 59, 999, DateTimeZone.UTC); 
String converted = jodatime.toDateTimeISO().toString(); 

Şu anda, aşağıdaki alıyorum.

2016-04-05T23:59Z 

Bunu en az hacky yolla nasıl yapacağını bilen var mı? Ve ISO8601'in kısaltılmış versiyonunun tarih ayrıştırma kütüphaneleri tarafından tanınabileceğini bana söyleyebilir misiniz?

+0

Neden toString() 'ye güveniyorsunuz? Bir biçimlendirici oluşturun. – Tunaki

cevap

3

Joda Time değerinin biçimlendirilmesinin normal yolu bir biçimlendirici kullanmaktadır. Bu durumda Z haricinde the format you want is already available, In:

DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinute(); 
String text = formatter.print(value); 

Z biraz zor - Ben size basit bir desen (DateTimeFormat.forPattern) ile istediğiniz tam olarak ne belirtebilirsiniz inanmıyorum ama bir DateTimeFormatterBuilder kullanabilirsiniz:

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
    .appendYear(4, 9) 
    .appendLiteral('-') 
    .appendMonthOfYear(2) 
    .appendLiteral('-') 
    .appendDayOfMonth(2) 
    .appendLiteral('T') 
    .appendHourOfDay(2) 
    .appendLiteral(':') 
    .appendMinuteOfHour(2) 
    .appendTimeZoneOffset("Z", true, 2, 4) 
    .toFormatter() 
    .withLocale(Locale.US); 

Bu, tam olarak istediğiniz şeyi yaptığına inanıyorum.

+0

Saat dilimini nasıl saklarsınız? – Ryan

+0

"ISODateTimeFormatter.dateHourMinue() .Zone (DateTimeZone.UTC)" ile birlikte kullandım, ancak 'Z' veya '+00: 00' göstermiyor ' – Ryan

+0

Üzgünüm, Z'yi fark etmemiştim. Her zaman UTC ise, yalnızca Aksi takdirde, bir 'DateTimeFormatter 'oluşturmak için yeni bir' DateTimeFormatter' oluşturun - –