Reputation: 3020
I have two times in String format. 9:00 AM
and 10:00 AM
. I want to subtract them. the difference must be 1 hour. I tried the following code to do that but i am not getting the desired results:
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));
How can i do that ?
Upvotes: 1
Views: 12565
Reputation: 1136
Your approach seems to be correct. Only thing you should not do is, changing timeDiff to new Date. Rather, change it to get time in minutes and hours as follows Ex : -
long diffMinutes = timeDiff / (60 * 1000) % 60;
long diffHours = timeDiff / (60 * 60 * 1000) % 24;
System.out.println(diffHours+" hours "+ diffMinutes +" minutes");
here is the complete code You can refer to if you want more proper display of time difference,
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);
}
}
Upvotes: 1
Reputation: 16209
Use Joda time! See this question
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());
Upvotes: 3
Reputation: 954
Here is best example given.
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();
}
}
Please find reference link for this example
http://www.mkyong.com/java/how-to-calculate-date-time-difference-in-java/
Upvotes: 0
Reputation: 37103
Try something like:
long timeDiff = d2.getTime() - d1.getTime();
System.out.println((timeDiff / 3600000) + " hour/s " + (timeDiff % 3600000) / 60000 + " minutes");
Output
1 hour/s 5 minutes
Upvotes: 3