2014-04-25 4 views
2

Я пытаюсь сравнить строки:Сравнивая два времени в строках

Время начала: 10:00 Время окончания: 12:00

В действительности есть время начала массив, который содержит мои ценности и end time array. В этом случае она будет структурирована как таковой:

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

Что является лучшим способом (с помощью Java), чтобы узнать время между временем. Время начала всегда будет до конца. Должен ли я попытаться отделить строку за минуту и ​​час с помощью регулярного выражения, затем проанализировать час и разобрать минута, сравнить, а затем использовать эту информацию, определить разницу, или это их метод сравнения времени в java? Обратите внимание, что эти времена находятся в 24-часовом формате, поэтому для ex. 1:00 вечера будет отображаться как 13:00.

+0

какая версия Java? – attila

+0

Я использую последнюю версию. Я только что установил jre с тех пор, как я перевел компьютеры, и мне пришлось повторно установить jre. – user3505931

+0

Вы хотите учитывать Летнее время или другие подобные аномалии? Или вы хотите принять стандартные 24-часовые дни? –

ответ

7

Вы можете найти продолжительность используя

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

Это работает как шарм. Благодаря! – krisDrOid

+0

Нерешенные старые классы времени, используемые здесь, теперь устарелые, вытесненные современными * java.time * классами, встроенными в Java 8 и более поздние версии. –

1

Используйте раскол способа разделить в 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); 
0

нет такого метода для сравнения.

вы можете разделить строку времени, используя ':'. затем разобрать час и минуту на целое число. затем вычислить продолжительность.

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

java.time В Java 8

У меня нет компьютера под рукой, чтобы попробовать это, но вы можете быть в состоянии сделать что-то как это в новом пакете java.time в Java 8. Не путайте новое java.time с печально известными старыми классами java.util.Date и .Calendar в комплекте с Java.

LocalTime start = LocalTime.parse("11:00"); 
LocalTime stop = LocalTime.parse("14:00"); 
Duration duration = Duration.between(start, stop); 
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); 

      } 
     } 

    } 


} 

источники:

How to calculate time difference in java?

How to convert milliseconds to "hh:mm:ss" format?

Смежные вопросы