tl; dr
ZonedDateTime.now(ZoneId.of("Asia/Kolkata"))
.format(DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL).withLocale (Locale.FRENCH))
java.time
el código en la pregunta utiliza problemático antigua fecha y hora clases, ahora heredadas, suplantadas por las clases java.time integradas en Java 8 y posteriores.
La configuración regional y la zona horaria no tienen nada que ver entre sí. La configuración regional determina el lenguaje humano y las normas culturales utilizadas al generar una Cadena para representar un valor de fecha y hora. La zona horaria determina el wall-clock time de una región particular utilizada para representar un momento en la línea de tiempo.
La clase Instant
representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds (hasta nueve (9) dígitos de una fracción decimal).
Instant instant = Instant.now();
2016-10-12T07: 21: 00.264Z
Aplicar una zona de tiempo para obtener una ZonedDateTime
. Yo elijo arbitrariamente mostrar este momento usando la zona horaria de India. Mismo momento, mismo punto en la línea de tiempo.
ZoneId z = ZoneId.of("Asia/Kolkata");
ZonedDateTime zdt = instant.atZone(z);
2016-10-12T12: 51: 00,264 + 05: 30 [Asia/Calcuta]
generar una cadena usando la localidad de Québec Canadá. Deje java.time localizar automáticamente la cadena.
Locale l = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL).withLocale (l);
String output = zdt.format (f); // Indian time zone with Québécois presentation/translation.
mercredi 12 octobre 2016 12 h 51 IST
Sobre java.time
El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
. El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a java.time.
Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
¿Dónde obtener las clases java.time?
- Java SE 8 y SE 9 y más tarde
- incorporado.
- Parte de la API estándar de Java con una implementación integrada.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
- Android
- El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- Ver How to use….
El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y more.
lamentablemente, esto no incluye los segundos. – lenooh