Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

196
Visualizações
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 Respostas
Responde à pergunta

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 de configuración regional.

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 Relatório

0

prueba esto

 val currentTime = SimpleDateFormat("hh:mm a", Locale.getDefault()).format(Date())
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda