All Downloads are FREE. Search and download functionalities are using the official Maven repository.

stream.util.parser.TimeFormat Maven / Gradle / Ivy

The newest version!
/*
 *  streams library
 *
 *  Copyright (C) 2011-2014 by Christian Bockermann, Hendrik Blom
 * 
 *  streams is a library, API and runtime environment for processing high
 *  volume data streams. It is composed of three submodules "stream-api",
 *  "stream-core" and "stream-runtime".
 *
 *  The streams library (and its submodules) is free software: you can 
 *  redistribute it and/or modify it under the terms of the 
 *  GNU Affero General Public License as published by the Free Software 
 *  Foundation, either version 3 of the License, or (at your option) any 
 *  later version.
 *
 *  The stream.ai library (and its submodules) is distributed in the hope
 *  that it will be useful, but WITHOUT ANY WARRANTY; without even the implied 
 *  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see http://www.gnu.org/licenses/.
 */
package stream.util.parser;

import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * 

* This class provides some utility functions useful to format elapsed time * (usually given in milliseconds). *

* * @author Christian Bockermann <[email protected]> * */ public class TimeFormat { public final static int SHORT_FORMAT = 0; public final static int LONG_FORMAT = 1; /* */ public final static long SEC_MS = 1000; /* Milliseconds of one minute */ public final static long MIN_MS = 60 * SEC_MS; /* Milliseconds of one hour */ public final static long HOUR_MS = 60 * MIN_MS; /* Milliseconds of one day */ public final static long DAY_MS = 24 * HOUR_MS; /* Milliseconds of one year (using 365,5 days) */ public final static long YEAR_MS = DAY_MS * 365; // + 12 * HOUR_MS; /* The number format for formatting the seconds */ static final NumberFormat fmt = null; // new DecimalFormat( "0.000" ); static final long[] UNITS = { YEAR_MS, DAY_MS, HOUR_MS, MIN_MS }; static final String[] UNIT_NAME = { " year", " day", "h", "m" }; static final String[] UNIT_LONG_NAMES = { "year", "day", "hour", "minute" }; private String[] format = UNIT_NAME; private int style = 0; NumberFormat secondFormat = new DecimalFormat("0.00"); public TimeFormat() { this(TimeFormat.SHORT_FORMAT); } public TimeFormat(int style) { this.style = style; format = UNIT_NAME; if (style == LONG_FORMAT) { format = UNIT_LONG_NAMES; secondFormat = new DecimalFormat("0"); } } /** *

* This method takes the given number of milliseconds, time, * and creates a new String containing a description of the time by means of * days, hours, minutes and seconds. If time is less than any * of the mentioned properties, then this field will not be printed, e.g. *

*
    *
  • calling format( 1000 ) will result in the string * "1s"
  • * *
  • calling format( 90000 * 1000 ), i.e. milliseconds of one * day + 1 hour, will result in "1 day 1h".
  • *
*

* This method is optimized over the old version (formatOld()). *

* * @param timeInMilliseconds * The time as an amount of milliseconds. * @return The time formatted as printable string. */ public String format(long timeInMilliseconds) { long ms = timeInMilliseconds; long left = ms; long units = 0; StringBuilder s = new StringBuilder(); for (int i = 0; i < UNITS.length; i++) { long unit = UNITS[i]; if (ms > unit) { left = timeInMilliseconds % unit; units = (ms - left) / unit; s.append(units); if (style == TimeFormat.LONG_FORMAT) s.append(" "); s.append(format[i]); if (style == TimeFormat.LONG_FORMAT && units > 1 && i > 0) s.append("s"); s.append(" "); ms = left; } } double sec = ((double) ms) / (double) SEC_MS; if (s.length() == 0 || sec > 0) { s.append(secondFormat.format(sec)); if (style == LONG_FORMAT) s.append(" sec"); else s.append("s"); } return s.toString(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy