- /* package whatever; // don't place package name! */ 
-   
- import java.util.*; 
- import java.lang.*; 
- import java.io.*; 
-   
-     import java.time.Duration; 
-     import java.time.LocalDateTime; 
-     import java.time.LocalTime; 
-     import java.time.ZoneId; 
-     import java.time.ZoneOffset; 
-     import java.time.ZonedDateTime; 
-     import java.time.format.DateTimeFormatter; 
-     import java.time.format.DateTimeParseException; 
-     import java.util.Locale; 
-   
- /* Name of the class has to be "Main" only if the class is public. */ 
- class Ideone 
- { 
- 	{ 
-   
-             // Run with out time zone (assumes UTC). 
-             Duration dShort = DurationProcessor.process ( "2008-01-01 01:00 pm - 01:56 pm" ); 
-             System- . out- . println ( "dShort: " +-  dShort  );
 
-   
-             Duration dLong = DurationProcessor.process ( "2008-01-01 08:30 pm - 2008-01-02 09:30 am" ); 
-             System- . out- . println ( "dLong: " +-  dLong  );
 
-   
-             // Run with specified time zone. 
-             ZoneId z = ZoneId.of ( "America/Montreal" ); 
-             Duration dShortZoned = DurationProcessor.process ( "2008-01-01 01:00 pm - 01:56 pm" , z ); 
-             System- . out- . println ( "dShortZoned: " +-  dShortZoned  );
 
-   
-             Duration dLongZoned = DurationProcessor.process ( "2008-01-01 08:30 pm - 2008-01-02 09:30 am" , z ); 
-             System- . out- . println ( "dLongZoned: " +-  dLongZoned  );
 
-   
- 	} 
- } 
-   
-   
-   
-     /** 
-      * 
-      * @author Basil Bourque 
-      */ 
-     class DurationProcessor { 
-   
-         static final int SHORT = 30; 
-         static final int LONG = 41; 
-   
-         static final DateTimeFormatter FORMATTER_LOCALDATETIME = DateTimeFormatter.ofPattern ( "uuuu-MM-dd hh:mm a" ); 
-         static final DateTimeFormatter FORMATTER_LOCALTIME = DateTimeFormatter.ofPattern ( "hh:mm a" ); 
-   
-         static public-  Duration process  ( String-  input  ) {
 
-             return DurationProcessor.process ( input , ZoneOffset.UTC ); 
-         } 
-   
-         static public-  Duration process  ( String-  input , ZoneId zoneId  ) {
 
-             Duration d = Duration.ZERO;  // Or maybe null. To be generated by the bottom of this code. 
-   
-             if ( null == input ) { 
-                 // … 
-                 System- . out- . println ( "ERROR - Passed null argument." );
 
-                 return d; 
-             } 
-             if ( input.length () == 0 ) { 
-                 // … 
-                 System- . out- . println ( "ERROR - Passed empty string as argument." );
 
-                 return d; 
-             } 
-   
-             String-  inputModified  =-  input. toUpperCase ( Locale- . ENGLISH ); // Change `am` `pm` to `AM` `PM` for parsing.
 
-   
-             String[]-  parts  =-  inputModified. split ( " - " );
 
-             String-  inputStart  =-  parts [ 0 ]; // A date-time sting.
 
-             String-  inputStop  =-  parts [ 1 ]; // Either a date-time string or a time-only string (assume the same date).
 
-   
-             ZonedDateTime start = null;  // To be generated in this block of code. 
-             try { 
-                 LocalDateTime ldt = LocalDateTime.parse ( inputStart , DurationProcessor.FORMATTER_LOCALDATETIME ); 
-                 start = ldt.atZone ( zoneId ); 
-             } catch ( DateTimeParseException e ) { 
-                 // … 
-                 System- . out- . println ( "ERROR - The start failed to parse. inputStart: " +-  inputStart  );
 
-                 return d; 
-             } 
-   
-             ZonedDateTime stop = null; // To be generated in this block of code. 
-             switch ( input.length () ) { 
-                 case DurationProcessor.SHORT:  // Example: "2008-01-01 01:00 pm - 01:56 pm" 
-                     try { 
-                         LocalTime stopTime = LocalTime.parse ( inputStop , DurationProcessor.FORMATTER_LOCALTIME ); 
-                         stop = ZonedDateTime.of ( start.toLocalDate () , stopTime , zoneId ); 
-                     } catch ( DateTimeParseException e ) { 
-                         // … 
-                         System- . out- . println ( "ERROR - The stop time failed to parse." );
 
-                         return d; 
-                     } 
-                     break; 
-                 case DurationProcessor.LONG:  // "2008-01-01 8:30 pm - 2008-01-02 09:30 am" 
-                     try { 
-                         LocalDateTime ldt = LocalDateTime.parse ( inputStop , DurationProcessor.FORMATTER_LOCALDATETIME ); 
-                         stop = ldt.atZone ( zoneId ); 
-                     } catch ( DateTimeParseException e ) { 
-                         // … 
-                         System- . out- . println ( "ERROR - The stop date-time failed to parse." );
 
-                         return d; 
-                     } 
-                     break; 
-                 default: 
-                     // … 
-                     System- . out- . println ( "ERROR - Input string is of unexpected length: " +-  input. length () );
 
-                     break; 
-             } 
-   
-             d = Duration.between ( start , stop ); 
-             return d; 
-         } 
-   
-         public static void-  main  ( String[]-  args  ) {
 
-             // Run with out time zone (assumes UTC). 
-             Duration dShort = DurationProcessor.process ( "2008-01-01 01:00 pm - 01:56 pm" ); 
-             System- . out- . println ( "dShort: " +-  dShort  );
 
-   
-             Duration dLong = DurationProcessor.process ( "2008-01-01 08:30 pm - 2008-01-02 09:30 am" ); 
-             System- . out- . println ( "dLong: " +-  dLong  );
 
-   
-             // Run with specified time zone. 
-             ZoneId z = ZoneId.of ( "America/Montreal" ); 
-             Duration dShortZoned = DurationProcessor.process ( "2008-01-01 01:00 pm - 01:56 pm" , z ); 
-             System- . out- . println ( "dShortZoned: " +-  dShortZoned  );
 
-   
-             Duration dLongZoned = DurationProcessor.process ( "2008-01-01 08:30 pm - 2008-01-02 09:30 am" , z ); 
-             System- . out- . println ( "dLongZoned: " +-  dLongZoned  );
 
-   
-         } 
-     }