Рассчитайте разницу ч / б два раза в Java - PullRequest
1 голос
/ 25 февраля 2011

Я пытаюсь вычислить разницу между данными двумя разами и нахожу в этом какую-то проблему. Предположим, у нас есть значения времени "11: 00" и 10:00 ". Я могу рассчитать, но в AM, PM есть небольшая путаница. Заранее спасибо

Я использую следующий код:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringToDate {

public static String timeDiff(String time1, String time2) {
    String Time = null;
    int difference;
    String a1 = time1.substring(6);
    String a2 = time2.substring(6);

    try {
        // Define a date format the same as the expected input
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm a");
        // Get time values of the date objects
        long l1 = sdf.parse(time1).getTime();
        long l2 = sdf.parse(time2).getTime();
        difference = (int) (l2 - l1);
        difference = (difference < 0 ? -difference : difference) / 60000;
        if (difference > 60) {
            int Hour = difference / 60;
            int Mins = difference % 60;
            if (Mins == 0)
                Time = Hour + " Hours";
            else
                Time = Hour + " Hours" + " " + Mins + " Mins";
        } else {
            Time = difference + " " + "Mins";
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return Time;
}

public static void main(String[] args) {
    String diff = StringToDate.timeDiff("10:00 AM", "01:00 PM");
    System.out.println("Difference: " + diff);
}

}

Ответы [ 5 ]

6 голосов
/ 25 февраля 2011

Вы можете получить объекты даты для времени начала и окончания. Затем получите время в миллисекундах и вычтите.

Разница в Millis = endDate.getTime () - startDate.getTime ()

Преобразовать разницу в часы / минуты.

2 голосов
/ 25 февраля 2011

Поскольку у вас уже есть способ вычислить разницу, если они имеют одинаковую AM / PM, вам просто нужно преобразовать их в 24-часовой масштаб:

if(time.isPM())
    //add 12 hours to time

, а затем выполнить ваши расчеты (при условииони в один день).Это также предполагает, что вы используете не только класс Java Calendar:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

С Calendar вы можете просто позвонить

Calendar.getTimeInMillis()

и вычесть их из каждогодругой.

1 голос
/ 01 июня 2012

только неправильный формат ... строка

SimpleDateFormat sdf=new SimpleDateFormat("HH:mm a"); 

должна быть изменена на

SimpleDateFormat sdf=new SimpleDateFormat("hh:mm a"); 

после этого все должно быть в порядке.

1 голос
/ 25 февраля 2011

Для преобразования строк и дат и / или расчета я рекомендую вам утилиты Apache Commons: https://commons.apache.org/lang/api-2.6/index.html

  • StringUtils
  • DateUtils
  • DateFormatUtils

Всегда полезно и не нужно изобретать велосипед ...

Обновление: недавно я использовал другую библиотеку: JodaTime , которая была очень полезна для всех манипуляций с датой.

0 голосов
/ 23 декабря 2016

Чтобы рассчитать разницу между двумя значениями в 12-часовом формате AM / PM, попробуйте следующее:

     try {
        SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss a"); 

        Date d1 = format.parse("11:59:30 PM");
        Date d2 = format.parse("12:01:00 AM");

        System.out.println("=== Start* :: "+ timeStart);
        System.out.println("=== End*   :: "+ timerEndOrCurrent);

        long difference = d2.getTime() - d1.getTime(); 
        int days = (int) (difference / (1000*60*60*24));  
        int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60)); 
        long min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60);
        hours =  (hours < 0 ? -hours : hours);
        long sec = (int) (difference / 1000) % (60);

        System.out.println("=== hours :: "+ hours);
        System.out.println("=== min   :: "+ ( min < 0 ? ((min-1)+60) : min));
        System.out.println("=== sec   :: "+ ( sec < 0 ? -sec : sec));
        System.out.println("");

    } catch (ParseException e1) {
        e1.printStackTrace();
    }
...