SimpleDateFormat使用当前日期解析时间字符串

时间:2015-10-25 11:30:46

标签: java android date

我收到一个时间字符串,例如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();

2 个答案:

答案 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,但是对于一种方法,它不能保证您的项目增加成本。