繁体   English   中英

SimpleDateFormat解析具有当前日期的时间字符串

[英]SimpleDateFormat Parse a time string with current 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();

我建议使用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);

这适用于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是一个很棒的Time实用程序库,但是它将为您的项目增加很多开销。 如果您反复需要编写时间转换方法,则可能应该切换到Joda,但仅使用一种方法就不能保证为您的项目增加成本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM