ejemplo - java convert milisegundos a formato de tiempo
log4j2 level (8)
Es posible usar apache commons (commons-lang3) y su clase DurationFormatUtils.
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
Por ejemplo:
String formattedDuration = DurationFormatUtils.formatDurationHMS(12313152);
// formattedDuration value is "3:25:13.152"
String otherFormattedDuration = DurationFormatUtils.formatDuration(12313152, DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN);
// otherFormattedDuration value is "P0000Y0M0DT3H25M13.152S"
Espero que pueda ayudar ...
Estoy intentando convertir un valor largo (La cantidad de milisegundos transcurridos desde 1/1/1970) a una hora de formato h:m:s:ms
El valor largo que uso como marca de tiempo, me sale de la timestamp
de timestamp
de campo del evento de registro de log4j.
¿Cómo hago la conversión?
Por ejemplo, para obtener los minutos intenté lo siguiente y todos fallaron:
logEvent.timeStamp / (1000 * 60 * 60) y
TimeUnit.MILLISECONDS.toMinutes (logEvent.timeStamp)
pero me sale basura
yo obtengo
1289375173771 for logEvent.timeStamp
358159 for logEvent.timeStamp/ (1000*60*60)
21489586 for TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)
¿Cómo puedo convertir esto?
Gracias
Le mostraré tres formas de (a) obtener el campo de minuto de un valor largo, y (b) imprimirlo usando el formato de fecha que desee. Uno usa java.util.Calendar , otro usa Joda-Time y el último utiliza el marco java.time integrado en Java 8 y posterior.
El framework java.time reemplaza las antiguas clases de fecha y hora, y está inspirado en Joda-Time, definido por JSR 310, y ampliado por el proyecto ThreeTen-Extra.
El framework java.time es el camino a seguir cuando se utiliza Java 8 y posterior. De lo contrario, como Android, usa Joda-Time. Las clases java.util.Date/.Calendar son notoriamente problemáticas y deben evitarse.
java.util.Date & .Calendar
final long timestamp = new Date().getTime();
// with java.util.Date/Calendar api
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp);
// here''s how to get the minutes
final int minutes = cal.get(Calendar.MINUTE);
// and here''s how to get the String representation
final String timeString =
new SimpleDateFormat("HH:mm:ss:SSS").format(cal.getTime());
System.out.println(minutes);
System.out.println(timeString);
Joda-Time
// with JodaTime 2.4
final DateTime dt = new DateTime(timestamp);
// here''s how to get the minutes
final int minutes2 = dt.getMinuteOfHour();
// and here''s how to get the String representation
final String timeString2 = dt.toString("HH:mm:ss:SSS");
System.out.println(minutes2);
System.out.println(timeString2);
Salida:
24
09: 24: 10: 254
24
09: 24: 10: 254
java.time
long millisecondsSinceEpoch = 1289375173771L;
Instant instant = Instant.ofEpochMilli ( millisecondsSinceEpoch );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , ZoneOffset.UTC );
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "HH:mm:ss:SSS" );
String output = formatter.format ( zdt );
System.out.println ( "millisecondsSinceEpoch: " + millisecondsSinceEpoch + " instant: " + instant + " output: " + output );
milisegundosDesdeEpoch: 1289375173771 instante: 2010-11-10T07: 46: 13.771Z salida: 07: 46: 13: 771
Obra
logEvent.timeStamp / (1000*60*60)
le dará horas, no minutos. Tratar:
logEvent.timeStamp / (1000*60)
y terminarás con la misma respuesta que
TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)
Prueba esto:
String sMillis = "10997195233";
double dMillis = 0;
int days = 0;
int hours = 0;
int minutes = 0;
int seconds = 0;
int millis = 0;
String sTime;
try {
dMillis = Double.parseDouble(sMillis);
} catch (Exception e) {
System.out.println(e.getMessage());
}
seconds = (int)(dMillis / 1000) % 60;
millis = (int)(dMillis % 1000);
if (seconds > 0) {
minutes = (int)(dMillis / 1000 / 60) % 60;
if (minutes > 0) {
hours = (int)(dMillis / 1000 / 60 / 60) % 24;
if (hours > 0) {
days = (int)(dMillis / 1000 / 60 / 60 / 24);
if (days > 0) {
sTime = days + " days " + hours + " hours " + minutes + " min " + seconds + " sec " + millis + " millisec";
} else {
sTime = hours + " hours " + minutes + " min " + seconds + " sec " + millis + " millisec";
}
} else {
sTime = minutes + " min " + seconds + " sec " + millis + " millisec";
}
} else {
sTime = seconds + " sec " + millis + " millisec";
}
} else {
sTime = dMillis + " millisec";
}
System.out.println("time: " + sTime);
Prueba esto:
Date date = new Date(logEvent.timeSTamp);
DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS");
String dateFormatted = formatter.format(date);
Lista de otros symbols
long second = (millis / 1000) % 60;
long minute = (millis / (1000 * 60)) % 60;
long hour = (millis / (1000 * 60 * 60)) % 24;
String time = String.format("%02d:%02d:%02d:%d", hour, minute, second, millis);
long second = TimeUnit.MILLISECONDS.toSeconds(millis);
long minute = TimeUnit.MILLISECONDS.toMinutes(millis);
long hour = TimeUnit.MILLISECONDS.toHours(millis);
millis -= TimeUnit.SECONDS.toMillis(second);
return String.format("%02d:%02d:%02d:%d", hour, minute, second, millis);
public static String timeDifference(long timeDifference1) {
long timeDifference = timeDifference1/1000;
int h = (int) (timeDifference / (3600));
int m = (int) ((timeDifference - (h * 3600)) / 60);
int s = (int) (timeDifference - (h * 3600) - m * 60);
return String.format("%02d:%02d:%02d", h,m,s);