usuario1134602
He estado desarrollando una aplicación de Android donde uso este código:
Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(d);
Necesito obtener la fecha después de 8 horas desde el momento actual, y quiero que esta fecha tenga formato de 24 horas, pero no sé cómo puedo hacerlo con SimpleDateFormat. tambien necesito esa fecha tiene DD/MM/YYYY HH:MM:SS
formato.
para formato de 12 horas:
SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("hh:mm", Locale.UK);
para formato de 24 horas:
SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("HH:mm", Locale.UK);
-
¿Por qué esto no está marcado como la respuesta correcta ..? ¿Por qué agregar cosas manualmente y luego probarlo?
– Shoaeb
29 de diciembre de 2018 a las 3:03
-
Este es el mejor enfoque porque la medianoche se informa correctamente como 00:00 y no como 24:00.
– Hashim Aktar
9 de noviembre de 2019 a las 0:58
Esto le dará la fecha en formato de 24 horas.
Date date = new Date();
date.setHours(date.getHours() + 8);
System.out.println(date);
SimpleDateFormat simpDate;
simpDate = new SimpleDateFormat("kk:mm:ss");
System.out.println(simpDate.format(date));
-
No tengo suficiente tiempo para probarlo, pero alguien dijo: “Si usa kk obtendrá resultados como 24:30 pero si usa HH puede obtenerlo como 00:30” [Source: stackoverflow.com/a/7078488/421467]. ¿Es eso cierto?
– Dr. jacky
18 de septiembre de 2016 a las 6:56
-
setHours está en desuso.
– Nouman Ch.
27 de febrero de 2019 a las 7:09
-
El problema con este enfoque es que Java informa la medianoche como las 24:00 en lugar de las 00:00 estándar.
– Hashim Aktar
9 de noviembre de 2019 a las 0:57
jet
Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d);
HH devolverá 0-23 por horas.
kk devolverá 1-24 por horas.
Ver más aquí: Personalización de formatos
método de uso setIs24HourView(Booleano es24HourView) para configurar el selector de hora para configurar la vista de 24 horas.
-
Esta sigue siendo la respuesta más correcta. Editaré para que quede más claro, ya que no estaba seguro exactamente de lo que estabas diciendo. Además, el enlace en la respuesta anterior también lo explica.
– adprocas
13 de noviembre de 2017 a las 13:51
-
@jeet ¿qué es más común, 0-23 o 1-24?
– ingeniero
2 de julio de 2019 a las 2:56
-
@simgineer He visto 0-23 en todos los casos que recuerdo (nunca recuerdo haber visto algo como 24:30).
– Lucas Vascorotto
27/04/2021 a las 15:00
Use HH en lugar de hh en la cadena del formateador
albahaca bourque
tl; dr
El enfoque moderno utiliza java.tiempo clases
Instant.now() // Capture current moment in UTC.
.truncatedTo( ChronoUnit.SECONDS ) // Lop off any fractional second.
.plus( 8 , ChronoUnit.HOURS ) // Add eight hours.
.atZone( ZoneId.of( "America/Montreal" ) ) // Adjust from UTC to the wall-clock time used by the people of a certain region (a time zone). Returns a `ZonedDateTime` object.
.format( // Generate a `String` object representing textually the value of the `ZonedDateTime` object.
DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
.withLocale( Locale.US ) // Specify a `Locale` to determine the human language and cultural norms used in localizing the text being generated.
) // Returns a `String` object.
23/01/2017 15:34:56
java.tiempo
FYI, el viejo Calendar
y Date
las clases son ahora legado. Suplantado por el java.tiempo clases Gran parte de java.time está retrotraído a Java 6, Java 7 y Android (ver más abajo).
Instant
Capture el momento actual en UTC con el Instant
clase.
Instant instantNow = Instant.now();
instantáneo.toString(): 2017-01-23T12:34:56.789Z
Si solo desea segundos completos, sin ninguna fracción de segundo, trunque.
Instant instant = instantNow.truncatedTo( ChronoUnit.SECONDS );
instantáneo.toString(): 2017-01-23T12:34:56Z
Matemáticas
El Instant
la clase puede hacer matemáticas, agregando una cantidad de tiempo. Especifique la cantidad de tiempo para agregar por el ChronoUnit
enum, una implementación de TemporalUnit
.
instant = instant.plus( 8 , ChronoUnit.HOURS );
instantáneo.toString(): 2017-01-23T20:34:56Z
ZonedDateTime
Para ver ese mismo momento a través de la lente del reloj de pared de una región en particular, aplique un ZoneId
conseguir un ZonedDateTime
.
Especifique un nombre de la zona horaria adecuada en el formato de continent/region
como America/Montreal
, Africa/Casablanca
o Pacific/Auckland
. Nunca use la abreviatura de 3-4 letras como EST
o IST
ya que son no zonas horarias verdaderas, no estandarizadas y ni siquiera únicas (!).
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
zdt.toString(): 2017-01-23T15:34:56-05:00[America/Montreal]
Generar cadena
Puede generar una cadena en el formato que desee especificando un patrón de formato en un DateTimeFormatter
objeto.
Tenga en cuenta que el caso importa en las letras de su patrón de formato. El código de la pregunta tenía hh
que es para el tiempo de 12 horas mientras que en mayúsculas HH
es de 24 horas (0-23) en ambos java.time.DateTimeFormatter
así como el legado java.text.SimpleDateFormat
.
Los códigos de formato en java.time son similares a los del legado SimpleDateFormat
pero no exactamente igual. Estudie cuidadosamente el documento de la clase. Aquí, HH
sucede que funciona de manera idéntica.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ).withLocale( Locale.US );
String output = zdt.format( f );
Localización automática
En lugar de codificar un patrón de formato, considere dejar java.tiempo localizar completamente la generación del String
texto llamando DateTimeFormatter.ofLocalizedDateTime
.
Y, por cierto, tenga en cuenta que la zona horaria y Locale
tener nada hacer unos con otros; cuestiones ortogonales. uno es sobre contenido, el significado (el tiempo del reloj de pared). el otro es sobre presentacióndeterminando el lenguaje humano y las normas culturales utilizadas para presentar ese significado al usuario.
Instant instant = Instant.parse( "2017-01-23T12:34:56Z" );
ZoneId z = ZoneId.of( "Pacific/Auckland" ); // Notice that time zone is unrelated to the `Locale` used in localizing.
ZonedDateTime zdt = instant.atZone( z );
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH ); // The locale determines human language and cultural norms used in generating the text representing this date-time object.
String output = zdt.format( f );
instantáneo.toString(): 2017-01-23T12:34:56Z
zdt.toString(): 2017-01-24T01:34:56+13:00[Pacific/Auckland]
salida: mardi 24 janvier 2017 a las 01:34:56 heure avancée de la Nouvelle-Zélande
Acerca de java.tiempo
El java.tiempo framework está integrado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas legado clases de fecha y hora como java.util.Date
, Calendar
& SimpleDateFormat
.
El Joda-Tiempo proyecto, ahora en modo de mantenimientoaconseja la migración a la java.tiempo clases
Para obtener más información, consulte la Tutorial de oráculo. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
puedes intercambiar java.tiempo objetos directamente con su base de datos. Usar una controlador JDBC conforme con JDBC 4.2 o después. No hay necesidad de cuerdas, no hay necesidad de java.sql.*
clases
¿Dónde obtener las clases java.time?
- Java SE 8, Java SE 9, Java SE 10y después
- Incorporado.
- Parte de la API de Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time está adaptada a Java 6 y 7 en ThreeTen-Backport.
- Androide
- Versiones posteriores de implementaciones de paquetes de Android de las clases java.time.
- Para Android anterior (TresDiezABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo usar ThreeTenABP….
Joda-Tiempo
Actualizar el Joda-Tiempo el proyecto está ahora en modo de mantenimientocon el equipo asesorando la migración a la java.tiempo clases
Joda-Tiempo hace que este tipo de trabajo sea mucho más fácil.
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;
DateTime later = DateTime.now().plusHours( 8 );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd/MM/yyyy HH:mm:ss" );
String laterAsText = formatter.print( later );
System.out.println( "laterAsText: " + laterAsText );
Cuando se ejecuta…
laterAsText: 19/12/2013 02:50:18
Tenga en cuenta que esta sintaxis utiliza zona horaria predeterminada. Una mejor práctica es usar una instancia de DateTimeZone explícita.
-
Androide:
Instant
requiere API nivel 26.– VonSchnauzer
20 de mayo de 2018 a las 14:29
-
@VonSchnauzer Para Android antes de 26, vea el ThreeTen-Backport y TresDiezABP proyectos vinculados en mi viñeta con la etiqueta “Android”.
– Basil Bourque
20 de mayo de 2018 a las 16:14
Fahim Parkar
Pruebe el siguiente código
String dateStr = "Jul 27, 2011 8:35:29 PM";
DateFormat readFormat = new SimpleDateFormat( "MMM dd, yyyy hh:mm:ss aa");
DateFormat writeFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = readFormat.parse( dateStr );
} catch ( ParseException e ) {
e.printStackTrace();
}
String formattedDate = "";
if( date != null ) {
formattedDate = writeFormat.format( date );
}
System.out.println(formattedDate);
¡¡¡Buena suerte!!!
Consulte por varios formatos.
-
Androide:
Instant
requiere API nivel 26.– VonSchnauzer
20 de mayo de 2018 a las 14:29
-
@VonSchnauzer Para Android antes de 26, vea el ThreeTen-Backport y TresDiezABP proyectos vinculados en mi viñeta con la etiqueta “Android”.
– Basil Bourque
20 de mayo de 2018 a las 16:14
mubarak tahir
Todo lo que necesitas hacer es cambiar la minúscula ‘hh’ en el patrón a una letra mayúscula ‘HH’
para Kotlin:
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") val currentDate = sdf.format(Date())
para java:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss") Date currentDate = sdf.format(new Date())
¿Cuál es su salida esperada con el ejemplo?
– jmj
18 de enero de 2012 a las 9:03
FYI, las viejas y problemáticas clases de fecha y hora como
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
son ahora legadosuplantado por el java.tiempo Clases integradas en Java 8 y versiones posteriores. Ver Tutorial por Oracle.– Basil Bourque
20 mayo 2018 a las 19:33