2013-09-25 47 views
0

我正在創建一個倒計時器,我有2個日期(現在和結束日期)格式爲mm:dd:yyyy:hour:minute:sec,我需要顯示剩餘的時間,有效是
結束日期:時間 - 當前日期:時間如何創建日期計時器

我想以毫秒爲單位都轉換日期減去然後將它們轉換回日期的,但似乎太麻煩 如何實現這種有效的java嗎?

+0

嘛。事實上,'java.util.Date'只不過是一個表示毫秒的長包裝。也許你可能會對喬達時間感興趣。 – SJuan76

+0

類似[PrettyTime](http://ocpsoft.org/prettytime/)可能能夠幫助 – MadProgrammer

回答

1

joda-time框架爲你做

String date = "02:13:2013:14:45:42"; // one of these is your end time 
String date2 = "02:13:2013:14:45:49"; // the other gets smaller every time as you approach the end time 
// 7 seconds difference 

DateTimeFormatter format = DateTimeFormat.forPattern("MM:dd:yyyy:HH:mm:ss"); // your pattern 

DateTime dateTime = format.parseDateTime(date); 
System.out.println(dateTime); 

DateTime dateTime2 = format.parseDateTime(date2); 
System.out.println(dateTime2); 

Duration duration = new Duration(dateTime, dateTime2); 
System.out.println(duration.getMillis()); 

打印

2013-02-13T14:45:42.000-05:00 
2013-02-13T14:45:49.000-05:00 
7000 

所以你分析你的日期字符串爲DateTime對象,並使用Duration對象來計算在一定時間單位的時間差。

,您也可以使用IntervalPeriod對象(取決於所要求的精度)

System.out.println(duration.toPeriod().get(DurationFieldType.seconds())); 

幽州

我想以毫秒爲單位轉換兩個日期,減法和 的然後將它們轉換回日期

你爲什麼不得不將它們轉換回來?你已經有了它們。你只是感興趣的時間。

+0

我將它們轉換回日期,因爲在我的應用程序中,我想以日期格式顯示剩餘時間 –

+0

@AkshatAgarwal請注意,持續時間不是日期,因此用日期顯示的「小時:分鐘:秒......」格式是沒有意義的。 'Period'對象有'get'方法,你可以使用任何時間單位。例如,您可以顯示小時,分鐘和秒鐘。 –

+0

@SotiriosDelimanolis它確實有意義,例如,如果您有倒數計時器,則希望以h:m:s格式顯示結果。但是你是對的,OP應該使用持續時間的getter方法來構建字符串輸出;) – MadProgrammer

0

Calendar until = Calendar.getInstance(); (「YYYY」,「DD」,「HH」,「MM」,「SS」);

getTimeDifference(until);


private String getTimeDifference(Calendar until) { 
    Calendar nowCal = (Calendar) until.clone(); 
    nowCal.clear(); 
    Date nowDate = new Date(System.currentTimeMillis()); 
    nowCal.setTime(nowDate); 
    int sec = until.get(Calendar.SECOND) - nowCal.get(Calendar.SECOND); 
    int min = until.get(Calendar.MINUTE) - nowCal.get(Calendar.MINUTE); 
    int hrs = until.get(Calendar.HOUR) - nowCal.get(Calendar.HOUR); 

    String timeDiff = hrs+":"+min+":"+sec; 

    return timeDiff; 
} 
+0

日期/時間差異是一個複雜的過程,需要考慮一些可變因素(不包括夏令時)),這兩個日期分開的越遠,問題就越嚴重。相互減去毫秒不會導致高度準確的結果。最好使用專用的庫,如JodaTime-IMHO – MadProgrammer

相關問題