105 lines
2.3 KiB
Java
105 lines
2.3 KiB
Java
package eu.dnetlib.utils;
|
|
|
|
import java.io.StringWriter;
|
|
import java.time.Instant;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.Locale;
|
|
import java.util.TimeZone;
|
|
|
|
public class DateUtils {
|
|
|
|
private static final long SECOND = 1000;
|
|
private static final long MINUTE = SECOND * 60;
|
|
private static final long HOUR = MINUTE * 60;
|
|
private static final long DAY = HOUR * 24;
|
|
private static final long YEAR = DAY * 365;
|
|
private static final DateTimeFormatter ISO8601FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
|
|
|
|
public static String elapsedTime(long t) {
|
|
final StringWriter a = new StringWriter();
|
|
|
|
boolean prependBlank = false;
|
|
if (t >= YEAR) {
|
|
a.append(floor(t, YEAR));
|
|
a.append(' ');
|
|
a.append('y');
|
|
prependBlank = true;
|
|
}
|
|
t %= YEAR;
|
|
if (t >= DAY) {
|
|
if (prependBlank) {
|
|
a.append(' ');
|
|
}
|
|
a.append(floor(t, DAY));
|
|
a.append(' ');
|
|
a.append('d');
|
|
prependBlank = true;
|
|
}
|
|
t %= DAY;
|
|
if (t >= HOUR) {
|
|
if (prependBlank) {
|
|
a.append(' ');
|
|
}
|
|
a.append(floor(t, HOUR));
|
|
a.append(' ');
|
|
a.append('h');
|
|
prependBlank = true;
|
|
}
|
|
t %= HOUR;
|
|
if (t >= MINUTE) {
|
|
if (prependBlank) {
|
|
a.append(' ');
|
|
}
|
|
a.append(floor(t, MINUTE));
|
|
a.append(' ');
|
|
a.append('m');
|
|
prependBlank = true;
|
|
}
|
|
t %= MINUTE;
|
|
if (t >= SECOND) {
|
|
if (prependBlank) {
|
|
a.append(' ');
|
|
}
|
|
a.append(floor(t, SECOND));
|
|
a.append(' ');
|
|
a.append('s');
|
|
prependBlank = true;
|
|
}
|
|
t %= SECOND;
|
|
if (t > 0) {
|
|
if (prependBlank) {
|
|
a.append(' ');
|
|
}
|
|
a.append(Integer.toString((int) t));
|
|
a.append(' ');
|
|
a.append('m');
|
|
a.append('s');
|
|
}
|
|
return a.toString();
|
|
}
|
|
|
|
public static String calculate_ISO8601(final long l) {
|
|
|
|
final LocalDateTime time =
|
|
LocalDateTime.ofInstant(Instant.ofEpochMilli(l), TimeZone
|
|
.getDefault()
|
|
.toZoneId());
|
|
|
|
String result = time.format(ISO8601FORMAT);
|
|
// convert YYYYMMDDTHH:mm:ss+HH00 into YYYYMMDDTHH:mm:ss+HH:00
|
|
// - note the added colon for the Timezone
|
|
result = result.substring(0, result.length() - 2) + ":" + result.substring(result.length() - 2);
|
|
return result;
|
|
}
|
|
|
|
private static String floor(final long d, final long n) {
|
|
return Long.toString(Math.floorDiv(d, n));
|
|
}
|
|
|
|
public static long now() {
|
|
return Instant.now().toEpochMilli();
|
|
}
|
|
|
|
}
|