TL; DR
ChronoUnit.HOURS.between( LocalTime.parse( "08:00:00" ) , LocalTime.parse( "13:00:00" ) )
5
... or...
ChronoUnit.HOURS.between( ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 23 ) , LocalTime.parse( "08:00:00" ) , ZoneId.of( "America/Montreal" ) ) , ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 25 ) , LocalTime.parse( "13:00:00" ) , ZoneId.of( "America/Montreal" ) ) )
53
java.time
The modern approach uses the java.time classes.
LocalTime
LocalTime class is a time of day with no date and no time zone.
LocalTime start = LocalTime.parse( "08:00:00" ) ; LocalTime stop = LocalTime.parse( "13:00:00" ) ;
Duration
Get a Duration object to display the time span.
Duration d = Duration.between( start , stop ) ;
ChronoUnit
For the number of hours use ChronoUnit .
long hours = ChronoUnit.HOURS.between( start , stop ) ;
Android
For Android, see the ThreeTen-Backport and ThreeTenABP projects. See the latest ammo below.
ZonedDateTime
If you want to cross days after midnight, you must set dates and time zones.
The time zone is critical for determining the date. At any given moment, the date changes around the world by zone. For example, a few minutes after midnight in Paris, France is a new day, still "yesterday" in Montreal Quebec .
Specify the time zone name in continent/region format, such as America/Montreal , Africa/Casablanca or Pacific/Auckland . Never use the abbreviation 3-4 letters, for example, EST or IST , since they are not real time zones, and are not standardized or even unique (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime start = ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 23 ) , LocalTime.parse( "08:00:00" ) , z ) ; ZonedDateTime stop = ZonedDateTime.of( LocalDate.of( 2017 , Month.JANUARY , 25 ) , LocalTime.parse( "13:00:00" ) , z ) ; long hours = ChronoUnit.HOURS.between( start , stop ) ;
See this code run on IdeOne.com .
53
About java.time
The java.time framework is built into Java 8 and later. These classes supersede the nasty old legacy time classes such as java.util.Date , Calendar and SimpleDateFormat .
The Joda-Time project, now in maintenance mode , we recommend switching to the java.time classes.
To learn more, see the Oracle Tutorial . And search for qaru for many examples and explanations. JSR 310 specification .
Where to get java.time classes?
- Java SE 8 , Java SE 9 , and then
- Built in.
- Part of the standard Java API with integrated implementation.
- Java 9 adds some minor features and fixes.
- Java SE 6 and Java SE 7
- Android
- The ThreeTenABP project adapts ThreeTen-Backport (mentioned above) specifically for Android.
- See How to use ThreeTenABP ....