example ejemplo dailyrollingfileappender java time log4j timestamp

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);