2013-07-06 8 views
6

Mam problem ze słojem czasu Joda, który pobrałem z http://sourceforge.net/projects/joda-time/files/joda-time/2.2/. mogę uzyskać wynik, gdy używam następujący fragmentJava-Jak obliczyć dokładną różnicę czasu podczas używania Joda Time Jar

static void timeDifferencewithJoda() { 

    String dateStart = "01/14/2012 09:29:58"; 
    String dateStop = "01/15/2012 10:31:48"; 

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); 

    Date d1 = null; 
    Date d2 = null; 

    try { 
     d1 = format.parse(dateStart); 
     d2 = format.parse(dateStop); 

     DateTime dt1 = new DateTime(d1); 
     DateTime dt2 = new DateTime(d2); 

     System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, "); 
     System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, "); 
     System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, "); 
     System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds."); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

wynik był

1 days, 1 hours, 1 minutes, 50 seconds. 

Ale obliczu konfliktu przepisów z tą różnicą czasu.

01/14/2012 09:29:58 

01/15/2012 10:31:48 

tutaj zadeklarowano ten czas, ale nie ma wskazania do okresu takiego jak AM lub PM. tj., Czas może być rano lub wieczorem .Jak uzyskać dokładną różnicę czasu?

Pomoc w tej sprawie będzie przydatna.

Odpowiedz

12

Stosując Joda formatter (nie AM/PM)

final String dateStart = "01/14/2012 09:29:58"; 
    final String dateStop = "01/15/2012 10:31:48"; 
    final DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss"); 
    final DateTime dt1 = format.parseDateTime(dateStart); 
    final DateTime dt2 = format.parseDateTime(dateStop); 

    System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, "); 
    System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, "); 
    System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, "); 
    System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");  

Stosując Joda formatter (z AM/PM)

final String dateStart = "01/14/2012 09:29:58 AM"; 
    final String dateStop = "01/15/2012 10:31:48 PM"; 
    final DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss a"); 
    final DateTime dt1 = format.parseDateTime(dateStart); 
    final DateTime dt2 = format.parseDateTime(dateStop); 

    System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, "); 
    System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, "); 
    System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, "); 
    System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds."); 

Obliczenie jednostek pomiędzy z Period

final Period period = new Period(dt1, dt2); 
    System.out.print(period.getDays() + " days, "); 
    System.out.print(period.getHours() + " hours, "); 
    System.out.print(period.getMinutes() + " minutes, "); 
    System.out.print(period.getSeconds() + " seconds."); 
+0

dzięki Ilya ... To działa również dla mnie :) –

+0

Cześć! Mam inny problem. Różnica minut jest ujemna .. –

0

W swoim SimpleDateFormat, masz HH, aby określić godziny i jak określono w dokumentacji, HH oznacza - Godzinę w dzień (0-23). Więc AM/PM nie ma tutaj zastosowania. Jeśli chcesz godzin AM/PM, zamiast tego powinieneś użyć KK lub hh. Możesz zobaczyć dokumentację here.

+0

Jestem w wielkim zamieszaniu. Możesz podać mi próbkę? –

+0

Możesz określić format jako 'SimpleDateFormat format = new SimpleDateFormat (" MM/dd/rrrr gg: mm: ss a ");' Następnie możesz wpisać daty takie jak: 'String dateStart =" 01/14/2012 09: 29:58 ";' 'String dateStop =" 01/15/2012 10:31:48 PM ";' –

+0

Przepraszam :(Próbowałem tego. Nie mogłem uzyskać rozwiązania. Rozwiązanie, które dało Ilya aktualnie pracuje dla mnie ... W każdym razie, dziękuję za próbę pomocy :) –

Powiązane problemy