簡體   English   中英

計算兩個日期之間的差后得到錯誤的時間

[英]Getting wrong time after calculating difference between two Dates

我想計算某個日期和當前時間之間的時差。

 int month = 9;
 int day = 17;
 int year = 2013;

 Calendar date = new GregorianCalendar(year, month, day);

 int miliseconds= (int) (System.currentTimeMillis() - calendar.getTimeInMillis());

 System.out.println(msToString(second));

 String msToString(int ms) {
    return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date(ms));
 }

輸出是

13091-13091 /? D / GTA:1970-01-08 15:00:20.287

我想獲取剩余的天數,小時數,分鍾數和秒數。

我怎么了

您可以嘗試以下方法

import java.util.Calendar;
import java.util.GregorianCalendar;


public class TimeToGoCalculator {

    /**
     * @param args
     */
    public static void main(String[] args) {

         int month = 8;
         int day = 19;
         int year = 2013;

         Calendar calendar = new GregorianCalendar(year, month, day);

         int timeToGo = (int) (calendar.getTimeInMillis() - System.currentTimeMillis())/1000;

         System.out.println(secondsToString(timeToGo));      
    }

    private static String secondsToString(int seconds) {

        int days = seconds / 24 / 3600;
        int hours = (seconds - (days * 24 * 3600 )) / 3600;
        int minutes = (seconds - (days * 24 * 3600 + hours * 3600)) / 60;
        seconds = (seconds - (days * 24 * 3600 + hours * 3600 + minutes * 60));

        return "The remaining time is "+days+" days, "+hours+" hours, "+minutes+
                " minutes, and "+seconds+" seconds.";
     }

}

那應該給您您想要的輸出。 請注意,在創建GregorianCalendar對象時,月份的索引為0,因此9月將為= 8。

您可以使用外部庫嗎? 然后Joda Time可以為您提供幫助,尤其是Period課程

它有一個用於兩個時刻的構造函數,並以年/月/日/小時/小時/秒/毫秒為單位提供了時刻之間的差異。

使用喬達時間圖書館
周期類可以提供幫助。

    int month = 9;
    int day = 17;
    int year = 2013;
    int hour= 0;
    int minute =0;
    int second =0;
    int millisecond = 0;

    DateTime dt1 = new DateTime(); //now
    DateTime dt2 = new DateTime(year, month, day, hour, minute, second, millisecond);

    //assuming dt1 is before dt2:
    Period period = new Period(dt1, dt2, PeriodType.dayTime());

   /*
    periodType.dayTime()):
    Gets a type that defines all standard fields from days downwards.

       days
       hours
       minutes
       seconds
       milliseconds 
   */

    PeriodFormatter periodFormatter = new PeriodFormatterBuilder()
            .printZeroAlways()
            .minimumPrintedDigits(2)
            .appendDays().appendSuffix("days ")
            .appendHours().appendSuffix("hours ")
            .appendMinutes().appendSuffix("minutes ")
            .appendSeconds().appendSuffix("seconds ");
            .toFormatter(); 

    System.out.println(periodFormatter.print(period));

您的second變量在兩個日期之間保留了毫秒數,而不是一個新日期。 例如,您需要使用這些毫秒數進行一些計算,以獲取天數。

您可以執行以下操作:

int minutes = second/1000/60; // millis to seconds, seconds to minutes

得到幾分鍾,然后轉換為小時,依此類推。

暫無
暫無

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

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