Java tutorial
/** * This file is distributed under the GPL * $Id: TimeFormatter.java 1865 2009-08-10 18:29:27Z scotta $ */ //package net.bnubot.util; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; /** * @author scotta */ public class TimeFormatter { public static final long SECOND = 1000; public static final long MINUTE = 60 * SECOND; public static final long HOUR = 60 * MINUTE; public static final long DAY = 24 * HOUR; public static final long WEEK = 7 * DAY; public static TimeZone timeZone = TimeZone.getDefault(); public static String tsFormat = "%1$tH:%1$tM:%1$tS.%1$tL"; public static Calendar getCalendar() { return Calendar.getInstance(timeZone); } /** * @return a nicely formatted timestamp */ public static String getTimestamp() { try { return String.format(tsFormat, getCalendar()); } catch (NoSuchMethodError e) { return ""; } } /** * Display a formatted length of time * @param time The time, in milliseconds * @return A String with the formatted length of time */ public static String formatTime(long time) { return formatTime(time, true); } /** * Display a formatted length of time * @param time The time, in milliseconds * @param ms Whether to display milliseconds * @return A String with the formatted length of time */ public static String formatTime(long time, boolean ms) { if (time < 0) return "(neg) " + formatTime(time * -1, ms); if (time == 0) return ms ? "0ms" : "0s"; String text = ""; if (ms) { if (time < 1000 * 60) // 60 seconds text = Long.toString(time % 1000) + "ms"; time /= 1000; } else { time--; time /= 1000; time++; } if (time > 0) { if (time < 60 * 60) // 60 minutes text = Long.toString(time % 60) + "s " + text; time /= 60; if (time > 0) { if (time < 60 * 24) // 24 hours text = Long.toString(time % 60) + "m " + text; time /= 60; if (time > 0) { if (time < 24 * 7) // 7 days text = Long.toString(time % 24) + "h " + text; time /= 24; if (time > 0) text = Long.toString(time) + "d " + text; } } } return text.trim(); } public static long parseDuration(String duration) throws NumberFormatException { long out = 0; for (String part : duration.split(" ")) { if (part.length() == 0) continue; int i = 0; for (; i < part.length(); i++) { char c = part.charAt(i); if ((c < '0') || (c > '9')) break; } long base = Long.parseLong(part.substring(0, i)); String unit = part.substring(i).toLowerCase(); switch (unit.charAt(0)) { case 's': if ("s".equals(unit) || "second".equals(unit) || "seconds".equals(unit)) { out += base * SECOND; continue; } break; case 'm': if ("m".equals(unit) || "min".equals(unit) || "mins".equals(unit) || "minute".equals(unit) || "minutes".equals(unit)) { out += base * MINUTE; continue; } break; case 'h': if ("h".equals(unit) || "hour".equals(unit) || "hours".equals(unit)) { out += base * HOUR; continue; } break; case 'd': if ("d".equals(unit) || "day".equals(unit) || "days".equals(unit)) { out += base * DAY; continue; } break; case 'w': if ("w".equals(unit) || "week".equals(unit) || "weeks".equals(unit)) { out += base * WEEK; continue; } break; } throw new NumberFormatException("Invalid unit: " + unit); } return out; } /** * Converts a Windows FileTime structure to a Date * @param ft contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). * @return a Date with the correct time */ public static Date fileTime(long ft) { // Date.parse("1/1/1601") == 11644455600000L long date = ft / 10000 - 11644455600000L; date += timeZone.getOffset(date); return new Date(date); } private static DateFormat df = DateFormat.getDateInstance(); private static DateFormat dtf = DateFormat.getDateTimeInstance(); public static long parseDate(String d) throws ParseException { df.setCalendar(getCalendar()); return df.parse(d).getTime(); } public static String formatDate(Date d) { df.setCalendar(getCalendar()); return df.format(d); } public static long parseDateTime(String dt) throws ParseException { dtf.setCalendar(getCalendar()); return dtf.parse(dt).getTime(); } public static String formatDateTime(Date d) { dtf.setCalendar(getCalendar()); return dtf.format(d); } }