2015-10-25 40 views
0

我收到一个时间字符串,例如14:26:16,它指的是今天。 我的要求是找出当前时间和给定时间之间的差异。SimpleDateFormat分析当前日期的时间字符串

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

您使用的是哪个Java版本?旧的'Date'和相关的类现在已经过时了,如果你正在编写新的代码,你应该使用Java 8 java.time,或者使用旧的Java JodaTime。 – RealSkeptic

+0

我没有提到我正在开发Android。它仍然适用?我正在使用JRE 1.8.0_45,但未能导入包的类。 –

+0

您不能在Android上使用Java 8,它只支持Java 7 – Shmuel

回答

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,但只有一种方法不能保证项目的额外成本。

+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); 
+0

https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html#minus-long-java .time.temporal.TemporalUnit-可以让事情变得更好恕我直言 –

+0

@RC。是的,这看起来更好,但我只是改编现有的代码到新的日期API :) –

+0

我认为使用'Duration.between(currentTime,arrivalTime).toMillis()'会更好。 – RealSkeptic

相关问题