Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较字符串中的两个时间_Java_String_Time_Comparison - Fatal编程技术网

Java 比较字符串中的两个时间

Java 比较字符串中的两个时间,java,string,time,comparison,Java,String,Time,Comparison,我试图与字符串进行比较: 开始时间:10:00结束时间:12:00 实际上,有一个包含我的值的开始时间数组和一个结束时间数组。在这种情况下,其结构如下: StartTimes[0] = "10:00" EndTimes[0] = "12:00" (使用java)找出时间间隔的最佳方法是什么。开始时间总是在结束时间之前。我应该尝试使用正则表达式按分钟和小时分隔字符串,然后解析小时和分钟,比较,然后使用该信息确定差异,还是它们是java中比较时间的方法?注意:这些时间是24小时格式,因此对于例

我试图与字符串进行比较:

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

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

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

(使用java)找出时间间隔的最佳方法是什么。开始时间总是在结束时间之前。我应该尝试使用正则表达式按分钟和小时分隔字符串,然后解析小时和分钟,比较,然后使用该信息确定差异,还是它们是java中比较时间的方法?注意:这些时间是24小时格式,因此对于例如下午1:00的时间,将显示为13:00。

使用拆分方法拆分这两个时间,并从中计算和分析持续时间:

问题样本:

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

没有这样的方法可以比较

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

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]);
    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();
    }
您应该创建一个日期(现在)并在其中添加小时、分钟。 获取长时间并计算持续时间

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]);
    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();
    }

您可以使用

    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);
Java8中的java.time 我手头没有一台计算机可以尝试这一点,但在Java8的新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 );

您可以使用java.text.simpleDataFormat和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);

            }
        }

    }


}
import java.text.simpleDataFormat;
导入java.util.concurrent.TimeUnit;
导入java.util.Date;
班级时间比较
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
字符串[]开始时间={“10:00”,“7:00”};
字符串[]EndTimes={“12:00”,“14:56”};
对于(int i=0;i0&&EndTimes!=null&&EndTimes.length>0){
SimpleDataFormat格式=新的SimpleDataFormat(“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.millides.toMinutes(毫秒)-TimeUnit.HOURS.toMinutes(TimeUnit.millides.toHours(毫秒));
系统输出打印项次(小时分钟);
}
}
}
}
资料来源:


什么版本的java?我使用的是最新版本。我刚安装了jre,因为我转移了计算机,不得不重新安装jre。你想解释夏令时或其他类似的异常情况吗?或者您想假设标准的24小时工作日吗?这里使用的麻烦的旧日期时间类现在是遗留的,被java 8和更高版本中内置的现代java.time类所取代&用try-catch块环绕。