比较两个字符串中的时间差异

9

我正在尝试比较两个字符串:

开始时间:10:00 结束时间:12:00

实际上,有一个包含我的值的开始时间数组和一个结束时间数组。在这种情况下,它将被构造如下:

 StartTimes[0] = "10:00"
 EndTimes[0] = "12:00"

在Java中,如何最好地找出两个时间之间的持续时间?开始时间始终早于结束时间。我应该尝试使用正则表达式将字符串按小时和分钟分开,然后解析小时和解析分钟进行比较,然后使用这些信息确定差异,还是在Java中有一种方法可以比较时间?请注意,这些时间以24小时格式显示,例如下午1:00将显示为13:00。


Java的哪个版本? - attila
我正在使用最新版本。我刚刚安装了JRE,因为我换了电脑,不得不重新安装JRE。 - user3505931
您想考虑夏令时或其他类似的异常情况吗?还是希望假设为标准的24小时制? - Basil Bourque
6个回答

21

您可以使用以下方式查找持续时间:

    String startTime = "10:00";
    String endTime = "12:00";
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    Date d1 = sdf.parse(startTime);
    Date d2 = sdf.parse(endTime);
    long elapsed = d2.getTime() - d1.getTime(); 
    System.out.println(elapsed);

这里使用的老旧日期时间类现已过时,被内置于Java 8及更高版本中的现代java.time类所取代。 - Basil Bourque
1
必须 import java.text.SimpleDateFormat; 并用 try-catch 块包围。 - Benny

6

Java 8中的java.time

我手头没有电脑来尝试,但你可能可以在Java 8的新java.time包中做类似的事情。不要将新的java.time与Java捆绑的臭名昭著的旧java.util.Date和.Calendar类混淆。

LocalTime start = LocalTime.parse( "11:00" );
LocalTime stop = LocalTime.parse( "14:00" );
Duration duration = Duration.between( start, stop );

如何知道时间是否已经过去了20分钟或者在20分钟之前?@Basil... - gumuruh
@gumuruh 你的意思是如何判断第二个时间是在第一个时间之前还是之后?如果第一个时间在第二个时间之前,则持续时间为正,否则为负。请参见 Duration#isNegative - Basil Bourque
1
@gumuruh 或者你的意思是“如何判断总时长是否超过20分钟?” 如果是这种情况:if ( duration.toMinutes() > 20 ) { … } - Basil Bourque
好的......你是正确的...!它与我们目前所得到的相匹配...。 - gumuruh

1
使用 split 方法将 2 个时间分割,然后计算并解析持续时间:
您的问题中的示例:
String StartTimes = "10:00";
String EndTimes = "12:00";
String startTimeParse[] = StartTimes.split(":");
String endTimeParse[] = EndTimes.split(":");
int firstHour = Integer.parseInt(startTimeParse[0]);
int firstMinute = Integer.parseInt(startTimeParse[1]);
int secondHour = Integer.parseInt(endTimeParse[0]);
int secondMinute = Integer.parseInt(endTimeParse[1]);
int durattionHour = secondHour - firstHour;
int durattionMinutes = secondMinute - firstMinute;
System.out.println("Duration : " +durattionHour+":"+durattionMinutes );

1

没有比较的方法。

您可以使用“:”拆分时间字符串,然后将小时和分钟解析为整数。然后计算持续时间。

int parseTimeString(String s) {
    String[] t = s.split(":");
    return Integer.parseInt(t[0]) * 60 + Integer.parseInt(t[1]); // minutes since 00:00
}

int durationInMinute = parseTimeString(EndTimes[0]) - parseTimeString(StartTimes[0]);

0
你应该创建一个包含当前日期的Date对象,并在其中添加小时和分钟。 获取长时间并计算持续时间。
    Date now = new Date();
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(timezone));
    Calendar.setTime(now);
    calendar.add(Calendar.Hour, 12);
    calendar.add(Calendar.MINUTE, 00);
    Date start = calendar.getTime();

    calendar.add(Calendar.Hour, 10);
    calendar.add(Calendar.MINUTE, 00);
    Date end = calendar.getTime();

    try {
        // in milliseconds
        long diff = d2.getTime() - d1.getTime();

        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000) % 24;

        System.out.print(diffHours + " hours, ");
        System.out.print(diffMinutes + " minutes, ");

    } catch (Exception e) {
        e.printStackTrace();
    }

0
你可以使用java.text.SimpleDateFormat和java.util.concurrent.TimeUnit来帮助你解析、比较和格式化到所需的格式。
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date date1 = format.parse(StartTimes[i]);
Date date2 = format.parse(EndTimes[i]);
long millis = date2.getTime() - date1.getTime(); 

String hourminute = String.format("%02d:%02d",   TimeUnit.MILLISECONDS.toHours(millis),
                                                TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)));
                    System.out.println(hourminute);

完整的代码可能是这样的:
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;
import java.util.Date;

class TimeCompare
{
    public static void main (String[] args) throws java.lang.Exception
    {

        String[] StartTimes = {"10:00", "7:00"};
        String[] EndTimes = {"12:00", "14:56"};
        for (int i=0; i<StartTimes.length; i++){
            if (StartTimes!=null && StartTimes.length>0 && EndTimes!=null &&EndTimes.length>0){
                SimpleDateFormat format = new SimpleDateFormat("HH:mm");
                Date date1 = format.parse(StartTimes[i]);
                Date date2 = format.parse(EndTimes[i]);
                long millis = date2.getTime() - date1.getTime(); 

                String hourminute = String.format("%02d:%02d",   TimeUnit.MILLISECONDS.toHours(millis),
                                            TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)));
                System.out.println(hourminute);

            }
        }

    }


}

来源:

如何在Java中计算时间差?

如何将毫秒转换为“小时:分钟:秒”格式?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接