簡體   English   中英

具有負值結果的時間計算Java

[英]Time calculation with negative value results Java

我想計算開始時間和結束時間之間的差。 采用HH:mm格式。

例如,第二天的開始時間是22.00 ,結束時間是1.00 ,我會收到一個負值。

如何讓程序知道結束時間是第二天?

我的劇本:

public void setBeginTijd()
{
    String dateStart = "22:00";
    String dateEnd = "1:00";

    SimpleDateFormat format = new SimpleDateFormat("HH:mm");

    Date d1 = null;
    Date d2 = null;

    try
    {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateEnd);

        long diff = d2.getTime() - d1.getTime();
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000) % 24;

        System.out.println(diffMinutes);
        System.out.println(diffHours);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

如果您可以假設 ,當時間為負數時,第二次時間必須是第二天,那么您可以簡單地說

if (diff < 0)
{
    diff = (24 * 60 * 60 * 1000) + diff;
}

編輯來詳細說明這一點,也回應評論:當然,這是一個非常簡單的解決方案。 它不能處理第二個日期是兩天后的情況。 它不處理DST開關。 它不處理1927年12月31日在上海時區更改 它不能替代帶有所有警告的正確建模日期。 這是一種盡力而為的方法,可以(可以)從給定信息中得出什么。

嘗試這個

    SimpleDateFormat formatNextDay = new SimpleDateFormat("dd:HH:mm");
    boolean isNextDay=false;
    try {
        if (d1.after(d2)) {
            isNextDay=true; 
            d1 = formatNextDay.parse("1:" + dateStart);
            d2 = formatNextDay.parse("2:" + dateEnd);
        }

您應該包括日期,月份和年份。

這是Java在運行程序后的日期:

d1 = Thu Jan 01 22:00:00 CET 1970
d2 = Thu Jan 01 01:00:00 CET 1970

正如某些人已經提到的,重要的是還要知道每個事件的日期,月份和年份,以計算非同一天的事件的時間段。

我修改了您認為可以幫助您的方法:

public void setBeginTijd()
{
        String dateStart = "22.08.2014 22:00";
        String dateEnd = "25.08.2014 01:00";

        SimpleDateFormat fullFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");

        Date d1 = null;
        Date d2 = null;

        try
        {
            d1 = fullFormat.parse(dateStart);
            d2 = fullFormat.parse(dateEnd);

            long diff = d2.getTime() - d1.getTime();
            long diffMinutes = diff / (60 * 1000) % 60;
            long diffHours = diff / (60 * 60 * 1000) % 24;
            long diffDays = diff / (24 * 60 * 60 * 1000);

            System.out.println("Delta minutes: " + diffMinutes);
            System.out.println("Delta hours: " + diffHours);
            System.out.println("Delta days: " + diffDays);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
}

這是小時和分鍾時差的正確數學。 當您對int / long值進行運算時,十進制小數的剝離會自動發生。

long diff = d2.getTime() - d1.getTime();
long diffHours = diff / 1000 / 60 / 60;
long diffMinutes = diff / 1000 / 60 - diffHours * 60;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM