簡體   English   中英

用Java減去時間字符串

[英]Subtracting time Strings in Java

我有兩次String格式。 9:00 AM10:00 AM 我要減去它們。 時差必須為1小時。 我嘗試下面的代碼來做到這一點,但我沒有得到想要的結果:

String time1 = "9:00 AM";
String time2 = "10:00 AM";
SimpleDateFormat formatter = new SimpleDateFormat("h:mm a");
Date d1 = formatter.parse(time1);
Date d2 = formatter.parse(time2);
long timeDiff = d2.getTime() - d1.getTime();
Date diff = new Date(timeDiff);
System.out.println(formatter.format(diff));

我怎樣才能做到這一點 ?

用喬達時間! 看到這個問題

DateTimeFormatter formatter = DateTimeFormat.forPattern("H:mm a");
DateTime time1 = formatter.parseDateTime("9:00 AM");
DateTime time2 = formatter.parseDateTime("10:00 AM");

Duration duration = new Duration(time1, time2);
System.out.printf("%s hour(s), %s minute(s)%n", duration.getStandardHours(), duration.getStandardMinutes());

嘗試類似的方法:

long timeDiff = d2.getTime() - d1.getTime();
System.out.println((timeDiff / 3600000) + " hour/s " + (timeDiff % 3600000) / 60000 + " minutes");
Output
1 hour/s 5 minutes

您的方法似乎是正確的。 唯一不應該做的就是將timeDiff更改為新的Date。 而是將其更改為以分鍾和小時為單位的時間,如下所示:例如:-

long diffMinutes = timeDiff / (60 * 1000) % 60;
long diffHours = timeDiff / (60 * 60 * 1000) % 24;
System.out.println(diffHours+" hours "+ diffMinutes +" minutes");

如果您想更正確地顯示時差,可以參考以下完整代碼,

import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.*;

/* Name of the class has to be "Main" only if the class is public. */

class TimeDiffTester
{
    public static String show(long value, String showAs) {
        if(value == 0) {
            return "";
        } else {
            return Math.abs(value) +" "+showAs+" ";
        }
    }
    public static void getDifferenceInTime(String time1, String time2) throws java.lang.Exception {
        SimpleDateFormat formatter = new SimpleDateFormat("h:mm a");
        Date d1 = formatter.parse(time1);
        Date d2 = formatter.parse(time2);
        long timeDiff = d2.getTime() - d1.getTime();

        long diffDays = timeDiff / (24 * 60 * 60 * 1000);
        long diffHours = timeDiff / (60 * 60 * 1000) % 24;
        long diffMinutes = timeDiff / (60 * 1000) % 60;
        long diffSeconds = timeDiff / 1000 % 60;

        String difference = show(diffDays, "days") + show(diffHours, "hours") + show(diffMinutes, "minutes") + show(diffSeconds, "seconds");
        if(diffDays < 0 || diffHours < 0 || diffMinutes < 0 || diffSeconds < 0) {
            System.out.println("-"+difference); 
        } else {
            System.out.println("+"+difference); 
        }
    }
    public static void main (String[] args) throws java.lang.Exception
    {
            String time1 = "4:30 PM";
            String time2 = "5:00 PM";

            getDifferenceInTime(time1,time2);

    }
}

這是最好的例子。

1000 milliseconds = 1 second
60 seconds = 1 minute
60 minutes = 1 hour
24 hours = 1 day


public static void main(String[] args) {

        String dateStart = "01/14/2012 09:29:58";
        String dateStop = "01/15/2012 10:31:48";

        //HH converts hour in 24 hours format (0-23), day calculation
        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

        Date d1 = null;
        Date d2 = null;

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

            //in milliseconds
            long diff = d2.getTime() - d1.getTime();

            long diffSeconds = diff / 1000 % 60;
            long diffMinutes = diff / (60 * 1000) % 60;
            long diffHours = diff / (60 * 60 * 1000) % 24;
            long diffDays = diff / (24 * 60 * 60 * 1000);

            System.out.print(diffDays + " days, ");
            System.out.print(diffHours + " hours, ");
            System.out.print(diffMinutes + " minutes, ");
            System.out.print(diffSeconds + " seconds.");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

請找到此示例的參考鏈接

http://www.mkyong.com/java/how-to-calculate-date-time-difference-in-java/

暫無
暫無

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

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