I want to calculate the difference between two date/time in java using Date and Calendar classes. The format that I have is "2012-01-24 12:30:00 PM".
I have implemented my own method and also google it to work with others, but haven't getting the right hint to handle AM and PM values.
The date/time difference got troubled whenever the time have 12(AM/PM) in it. For example if I have date/time "2012-01-24 12:30:00 PM" and "2012-01-24 02:30:00 PM" it shows the difference is 10 hours.
Considering the code on this link how can it be modified to handle AM and PM.
To convert String date into Date I use following code:
String sessionTimeStart = "2012-01-24 12:30:00 PM";
String sessionTimerEndOrCurrent = "2012-01-24 02:30:00 PM";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
Date d1 = null;
Date d0 = null;
try {
d1 = format.parse(sessionTimeStart);
d0 = format.parse(sessionTimerEndOrCurrent);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
onsider using Apache Commons DateUtils DurationFormatUtils formatPeriod method will do the magic.
Good luck!
EDIT Assuming that you have Date a and Date b initialized at this point,
Calendar has a methode add() that can be used for substracting too. Take a look at it. You should be using Calendar instead of Date anyway because most of the Date operations are deprecated.
So, you have these dates as strings? Parse them with a
SimpleDateFormat
with the appropriate format string, and compute the difference in hours:Your error is that you are using HH (24-hour hours) instead of hh (12-hour hours) in your format string.
The problem is your date format: instead of
yyyy-MM-dd HH:mm:ss a
useyyyy-MM-dd hh:mm:ss a
.HH
will be the hour in day (0-23) whereashh
will be the hour in AM/PM (1-12). Thus with your date format 02:30:00 will be parsed as just that instead of being converted to the PM version (which in hour of day would be 14:30:00).Don't build it yourself, use an established library. Jodatime is used widely.
The reason why it shows 10 hours as the difference is that you've got an error in the pattern when parsing the input.
Here's an example using
SimpleDateFormat
:Will return
10
.When we just slightly change the date format pattern, using
hh
for hour in am/pm (1-12) instead ofHH
for hour in day (0-23):It returns (the expected)
2
.See the documentation for
SimpleDateFormat
to get your patterns right.