×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Java
Posted by: Gerrit Viljoen
Added: Jul 31, 2014 8:17 AM
Views: 18
Parses a duration/time span to milliseconds. Case insensitive and ignores ws.

Example:
"1s" ~> 1000
"59s" ~> 59000
"5d 4h 3m 2s" ~> 446582000
  1.     public static long parseDuration(CharSequence duration) {
  2.         if (duration == null) {
  3.             return 0;
  4.         } else {
  5.             long sum = 0;
  6.             StringBuilder builder = new StringBuilder();
  7.             for (int a = 0; a < duration.length(); a++) {
  8.                 final char c = duration.charAt(a);
  9.                 if (Character.isDigit(c)) {
  10.                     builder.append(c);
  11.                 } else if ((c == 's') || (c == 'S')) {
  12.                     if (builder.length() == 0) {
  13.                         throw new IllegalArgumentException("Invalid [duration] argument: dangling meta character");
  14.                     } else {
  15.                         sum += Long.parseLong(builder.toString()) * 1000l;
  16.                         builder = new StringBuilder();
  17.                     }
  18.                 } else if ((c == 'm') || (c == 'M')) {
  19.                     if (builder.length() == 0) {
  20.                         throw new IllegalArgumentException("Invalid [duration] argument: dangling meta character");
  21.                     } else {
  22.                         sum += Long.parseLong(builder.toString()) * 60l * 1000l;
  23.                         builder = new StringBuilder();
  24.                     }
  25.                 } else if ((c == 'h') || (c == 'H')) {
  26.                     if (builder.length() == 0) {
  27.                         throw new IllegalArgumentException("Invalid [duration] argument: dangling meta character");
  28.                     } else {
  29.                         sum += Long.parseLong(builder.toString()) * 60l * 60l * 1000l;
  30.                         builder = new StringBuilder();
  31.                     }
  32.                 } else if ((c == 'd') || (c == 'D')) {
  33.                     if (builder.length() == 0) {
  34.                         throw new IllegalArgumentException("Invalid [duration] argument: dangling meta character");
  35.                     } else {
  36.                         sum += Long.parseLong(builder.toString()) * 24l * 60l * 60l * 1000l;
  37.                         builder = new StringBuilder();
  38.                     }
  39.                 } else if ((!Character.isWhitespace(c)) && (!Character.isISOControl(c))) {
  40.                     throw new IllegalArgumentException("Invalid [duration] argument: illegal character");
  41.                 }
  42.             }
  43.             if (builder.length() > 0) {
  44.                 throw new IllegalArgumentException("Invalid [duration] argument: missing meta character");
  45.             }
  46.             return sum;
  47.         }
  48.     }