2009-09-17 11 views
56

Java ile Joda-Time kütüphanesini kullanıyorum. Bir Periyot nesnesini "x gün, x saat, x dakika" biçiminde bir dizgeye çevirmeye çalışmakta zorluk çekiyorum.Dizgeye geçme dönemi

Bu Periyot nesneleri ilk olarak onlara bir miktar saniye ekleyerek oluşturulur (bunlar XML olarak saniyeler içinde serileştirilir ve onlardan yeniden oluşturulur). İçinde getHours() vb. Yöntemlerini kullanırsam, tek alacağım sıfır ve toplam saniye ile getSeconds.

Joda, saniyeleri gün, saat vb. Gibi ilgili alanlara nasıl hesaplayabilir?

+1

İlgili: http://stackoverflow.com/q/10829870/11236 – ripper234

cevap

91

Sen saniye sayısı ile inşa eğer, o sahip olduğu tek değer çünkü dönemini normalleştirmek gerekiyor.

Düzenleme ripper234 tarafından vb, bu gün, dakika, saniye toplam sayısına aşağı kıracak normalleştirilmesi - Bir TL;DR version ekleme: Örneğin PeriodFormat.getDefault().print(period)

:

public static void main(String[] args) { 
    PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder() 
    .appendDays() 
    .appendSuffix(" day", " days") 
    .appendSeparator(" and ") 
    .appendMinutes() 
    .appendSuffix(" minute", " minutes") 
    .appendSeparator(" and ") 
    .appendSeconds() 
    .appendSuffix(" second", " seconds") 
    .toFormatter(); 

    Period period = new Period(72, 24, 12, 0); 

    System.out.println(daysHoursMinutes.print(period)); 
    System.out.println(daysHoursMinutes.print(period.normalizedStandard())); 
} 

yazdırmak Will :

24 minutes and 12 seconds
3 days and 24 minutes and 12 seconds

Böylece normalize edilmemiş dönem için çıktının saat sayısını görmezden gelebileceğini görüyorsunuz (72 saati 3 güne çevirmedi). işte bu yüzden, sen saat kaçırıyorsun

Period period = new Period(startDate, endDate); 
System.out.println(PeriodFormat.getDefault().print(period)) 
+0

o.O ... Sanırım daha ayrıntılı olmalıydım. – Jherico

+0

Mükemmel cevap için teşekkürler. –

+1

-1 benden, çünkü bu yerelleştirilmesi zordur. – Trejkaz

12
Period period = new Period(); 
    // prints 00:00:00 
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds())); 
    period = period.plusSeconds(60 * 60 * 12); 
    // prints 00:00:43200 
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds())); 
    period = period.normalizedStandard(); 
    // prints 12:00:00 
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds())); 
+2

Bu etkiyi elde etmek için biçim dizgisini Dönem veya Biçim Vericisine aktaramazsınız. – greenoldman

22

Ayrıca çoğu durumda iyi gelir Standart biçimlendirici kullanabilirsiniz. Günler sonra saatler ekleyin ve problem çözüldü.

+0

"Çoğu vaka" demezdim, ama yararlıdır, evet. – skaffman

+0

Kabul edilen yanıtın bir parçası olmalıdır. – ripper234

+0

Eğer kullanıcılarınız hizip kaç saniye olduğunu gerçekten önemsiyorsa, o zaman çok faydalıdır. –

2
PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder() 
    .appendDays() 
    **.appendSuffix(" day", " days") 
    .appendSeparator(" and ") 
    .appendMinutes() 
    .appendSuffix(" minute", " minutes")** 
    .appendSeparator(" and ") 
    .appendSeconds() 
    .appendSuffix(" second", " seconds") 
    .toFormatter(); 

: