Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

89
Views
SimpleDateFormat no devuelve el valor esperado en la prueba unitaria

Tengo una lógica para extraer la hora exacta de la fecha dada (por ejemplo, 12:00 PM p. m.).

Al final de la lógica, estoy usando SimpleDateFormat para analizar la fecha. Cuando ejecuto el código en los dispositivos Android, todo funciona bien. Además, cuando ejecuto las pruebas unitarias en mi MacBook, sistema operativo Windows y canalización de Bitbucket, todas las pruebas pasan. Pero, cuando ejecuto las pruebas unitarias en la MacBook M1-pro 2021 con el mismo estudio y código base de Android, una de las pruebas falla.

Esta es la parte del código para formatear la fecha:

 val output = SimpleDateFormat("hh:mm a") return output.format(date)

El resultado esperado es algo así como 12:00 PM . m., lo cual está totalmente bien en los escenarios que mencioné.

esta es la interfaz de usuario en mi dispositivo Android:

Pero en el MacBook M1-pro 2021 , la prueba falla porque el formateador devuelve las 12:00 pm . m.:

 expected: 12:00 PM but was : 12:00 pm

Este es el resultado de la prueba unitaria en MacBook M1-pro 2021

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Supongo que está confiando implícitamente en la configuración regional predeterminada actual de JVM, y esa configuración regional difiere entre sus diversos entornos de prueba.

O está utilizando diferentes versiones de Java o Android que tienen diferentes definiciones de las reglas locales.

Y, otro problema: está utilizando clases de fecha y hora terribles que fueron suplantadas hace años por las clases java.time modernas definidas en JSR 310.

Las clases java.time se incluyen con Java 8+ y con Android 26+. Para versiones anteriores de Android, use las herramientas más recientes para proporcionar la mayor parte de la funcionalidad de java.time a través de la "desazucaración de API".

Convierta su clase heredada java.util.Date en su reemplazo java.time.Instant llamando a nuevos métodos de conversión agregados a las clases antiguas.

 Instant instant = myJavaUtilDate.toInstant() ;

Ajústese a su zona horaria deseada.

 ZoneId z = ZoneId.of( "America/Edmonton" ) ; ZonedDateTime zdt = instant.atZone( z ) ;

Extrae la porción de tiempo, el foco de tu Pregunta.

 LocalTime lt = zdt.toLocalTime() ;

Localiza automáticamente la salida. Especifique la Locale explícitamente. El Locale determina el idioma humano y las normas culturales que se aplicarán en la localización.

 Locale locale = Locale.CANADA ; DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale ) ; String output = lt.format( lt ) ;

Tenga en cuenta que Java 9 cambió su comportamiento predeterminado para usar el conjunto mucho más rico de definiciones de configuración regional en el Repositorio de datos de configuración regional común (CLDR) proporcionado por Unicode Consortium. Este cambio puede generar algunas diferencias, como el formato AM/PM. Además, los datos CLDR continúan evolucionando, por lo que las versiones posteriores pueden cambiar algunas reglas.

Es posible que Android también haya cambiado las reglas entre versiones, pero no conozco el historial allí.

Le sugiero que no se preocupe por diferencias tan pequeñas en el formato localizado. Pero si insistes, tendrás que:

  • Controle la Locale de la que depende su código, ya sea implícita o explícitamente.
  • Controle la fuente y la versión de las reglas/definiciones de configuración regional utilizadas por esa configuración Locale .
over 4 years ago · Santiago Trujillo Report

0

prueba esto

 val currentTime = SimpleDateFormat("hh:mm a", Locale.getDefault()).format(Date())
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!