我收到一个时间字符串,例如14:26:16
,它指的是今天。
我的要求是找出当前时间和给定时间之间的差异。
SimpleDateFormat在没有异常的情况下解析字符串,但不是获得25/10/2015 14:26:16
而是获得01/01/1970 14:26:16
。虽然听起来很简单,但我还没有想出一个用正确的日期解析它的简单方法。
我目前的代码:
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date currentTime = new Date(); //25/10/2015
Date arrivalTime = formatter.parse(eta); //01/01/1970
final long difference = arrivalTime.getTime() - currentTime.getTime();
答案 0 :(得分:2)
我建议使用LocalTime
像这样的东西
LocalTime arrivalTime = LocalTime.parse(eta, DateTimeFormatter.ISO_LOCAL_TIME);
LocalTime currentTime = LocalTime.now();
final long difference = arrivalTime.getLong(ChronoField.MILLI_OF_DAY) - currentTime.getLong(ChronoField.MILLI_OF_DAY);
答案 1 :(得分:1)
这适用于Java 7,适用于Android。
/**
* Android utility to get the elapsed milliseconds between a String timestamp (in the future) and the current time
* @param timeStamp Accepts a String in the form of HH:mm:ss
* @return Elapsed time in milliseconds
* @throws ParseException
*/
public static long timeDiff(String timeStamp) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date arrivalTime = formatter.parse(timeStamp);
Calendar arrivalCal= Calendar.getInstance();
arrivalCal.set(Calendar.HOUR_OF_DAY, arrivalTime.getHours());
arrivalCal.set(Calendar.MINUTE, arrivalTime.getMinutes());
arrivalCal.set(Calendar.SECOND, arrivalTime.getSeconds());
arrivalCal.set(Calendar.MILLISECOND, 0);
return arrivalCal.getTimeInMillis() - System.currentTimeMillis();
}
为了解决上面关于Joda-time的评论,Joda是一个很棒的实用工具库,但它会给你的项目增加很多开销。如果您反复需要编写时间转换方法,那么您应该切换到Joda,但是对于一种方法,它不能保证您的项目增加成本。