我正在创建一个倒计时器,我有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