我正在創建一個倒計時器,我有2個日期(現在和結束日期)格式爲mm:dd:yyyy:hour:minute:sec,我需要顯示剩餘的時間,有效是
結束日期:時間 - 當前日期:時間如何創建日期計時器
我想以毫秒爲單位都轉換日期減去然後將它們轉換回日期的,但似乎太麻煩 如何實現這種有效的java嗎?
我正在創建一個倒計時器,我有2個日期(現在和結束日期)格式爲mm:dd:yyyy:hour:minute:sec,我需要顯示剩餘的時間,有效是
結束日期:時間 - 當前日期:時間如何創建日期計時器
我想以毫秒爲單位都轉換日期減去然後將它們轉換回日期的,但似乎太麻煩 如何實現這種有效的java嗎?
讓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
對象來計算在一定時間單位的時間差。
,您也可以使用Interval
或Period
對象(取決於所要求的精度)
System.out.println(duration.toPeriod().get(DurationFieldType.seconds()));
幽州
我想以毫秒爲單位轉換兩個日期,減法和 的然後將它們轉換回日期
你爲什麼不得不將它們轉換回來?你已經有了它們。你只是感興趣的時間。
我將它們轉換回日期,因爲在我的應用程序中,我想以日期格式顯示剩餘時間 –
@AkshatAgarwal請注意,持續時間不是日期,因此用日期顯示的「小時:分鐘:秒......」格式是沒有意義的。 'Period'對象有'get'方法,你可以使用任何時間單位。例如,您可以顯示小時,分鐘和秒鐘。 –
@SotiriosDelimanolis它確實有意義,例如,如果您有倒數計時器,則希望以h:m:s格式顯示結果。但是你是對的,OP應該使用持續時間的getter方法來構建字符串輸出;) – MadProgrammer
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;
}
日期/時間差異是一個複雜的過程,需要考慮一些可變因素(不包括夏令時)),這兩個日期分開的越遠,問題就越嚴重。相互減去毫秒不會導致高度準確的結果。最好使用專用的庫,如JodaTime-IMHO – MadProgrammer
嘛。事實上,'java.util.Date'只不過是一個表示毫秒的長包裝。也許你可能會對喬達時間感興趣。 – SJuan76
類似[PrettyTime](http://ocpsoft.org/prettytime/)可能能夠幫助 – MadProgrammer