Convert a string representing a duration, ie: 300ms, 20s, etc to to nanoseconds
Suppose you have a string in your application that has the duration of time using ns, us ms , s h, d. And you want to convert them all to nano seconds, then utility will of great help to you.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package com.javagists.learn.utils; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ConvertDuration2TimeUnit { private static final Pattern DURATION_STRING_PATTERN = Pattern.compile("^(\d+)\s?(ns|us|ms|s|m|h|d)?$"); public static long convertDurationString2Nanos(String duration) { final Matcher matcher = DURATION_STRING_PATTERN.matcher(duration); if (!matcher.matches()) { throw new IllegalArgumentException("duration string format invalid"); } final long sourceDuration = Long.parseLong(matcher.group(1)); final String sourceUnitString = matcher.group(2); final TimeUnit sourceTimeUnit; if ("ns".equalsIgnoreCase(sourceUnitString)) { sourceTimeUnit = TimeUnit.NANOSECONDS; } else if ("us".equalsIgnoreCase(sourceUnitString)) { sourceTimeUnit = TimeUnit.MICROSECONDS; } else if ("ms".equalsIgnoreCase(sourceUnitString)) { sourceTimeUnit = TimeUnit.MILLISECONDS; } else if ("s".equalsIgnoreCase(sourceUnitString)) { sourceTimeUnit = TimeUnit.SECONDS; } else if ("m".equalsIgnoreCase(sourceUnitString)) { sourceTimeUnit = TimeUnit.MINUTES; } else if ("h".equalsIgnoreCase(sourceUnitString)) { sourceTimeUnit = TimeUnit.HOURS; } else if ("d".equalsIgnoreCase(sourceUnitString)) { sourceTimeUnit = TimeUnit.DAYS; } else { sourceTimeUnit = TimeUnit.MILLISECONDS; } return sourceTimeUnit.toNanos(sourceDuration); } } |