usar new icon example definicion codigo borderfactory java datetime java-8 datetime-format java-time

example - new icon java



Formato instantáneo a cadena (4)

Zona horaria

Para formatear un Instant time-zone se requiere una time-zone . Sin una zona horaria, el formateador no sabe cómo convertir el instante en campos humanos de fecha y hora, y por lo tanto arroja una excepción.

La zona horaria se puede agregar directamente al formateador usando withZone() .

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.SHORT ) .withLocale( Locale.UK ) .withZone( ZoneId.systemDefault() );

Generando cadena

Ahora usa ese formateador para generar la representación de Cadena de tu Instantáneo.

Instant instant = Instant.now(); String output = formatter.format( instant );

Volcado a la consola.

System.out.println("formatter: " + formatter + " with zone: " + formatter.getZone() + " and Locale: " + formatter.getLocale() ); System.out.println("instant: " + instant ); System.out.println("output: " + output );

Cuando se ejecuta.

formatter: Localized(SHORT,SHORT) with zone: US/Pacific and Locale: en_GB instant: 2015-06-02T21:34:33.616Z output: 02/06/15 14:34

Estoy tratando de formatear un Instantáneo a una Cadena usando la nueva java 8 time-api y un patrón:

Instant instant = ...; String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant);

Usando el código anterior, recibo una excepción que se queja de un campo no compatible:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra at java.time.Instant.getLong(Instant.java:608) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) ...


La clase Instant no contiene información de zona, solo almacena la marca de tiempo en milisegundos desde UNIX epoch, es decir, 1 de enero de 1070 desde UTC. Por lo tanto, el formateador no puede imprimir una fecha porque la fecha siempre se imprime para la zona horaria concreta. Debe configurar la zona horaria para formatear y todo estará bien, así:

Instant instant = Instant.ofEpochMilli(92554380000L); DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(Locale.UK).withZone(ZoneOffset.UTC); assert formatter.format(instant).equals("07/12/72 05:33"); assert instant.toString().equals("1972-12-07T05:33:00Z");


DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd"); String text = date.toString(formatter); LocalDate date = LocalDate.parse(text, formatter);

Creo que esto podría ayudar, es posible que necesite usar algún tipo de variación de fecha local en lugar de instantánea


public static void main(String[] args) { DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") .withZone(ZoneId.systemDefault()); System.out.println(DATE_TIME_FORMATTER.format(new Date().toInstant())); }