Quiero convertir un java.util.Date
objeto en a String
en Java.
El formato es 2010-05-30 22:15:52
java
date
formatting
java.util.date
novicePrgrmr
fuente
fuente
Date
en 2019. Esa clase está mal diseñada y obsoleta desde hace mucho tiempo. En su lugar, useInstant
u otra clase de java.time, la API de fecha y hora moderna de Java .Respuestas:
Convierta una fecha en una cadena utilizando el
DateFormat#format
método:De http://www.kodejava.org/examples/86.html
fuente
Calendar
lugar de simplenew Date()
? ¿Hay diferencia?MM/dd/yyyy
formato es estúpido y roto. No lo uses. Siempre usedd/MM/yyyy
oyyyy-MM-dd
.yyyy-MM-dd
todas partes, pero ¿qué puedes hacer?).fuente
Commons-lang DateFormatUtils está lleno de golosinas (si tienes commons-lang en tu classpath)
fuente
null
cheque adicional .tl; dr
java.time
La forma moderna es con las clases java.time que ahora suplantan a las antiguas clases problemáticas de fecha y hora heredadas.
Primero convierta su
java.util.Date
a unInstant
. LaInstant
clase representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos (hasta nueve (9) dígitos de una fracción decimal).Las conversiones hacia / desde java.time se realizan mediante nuevos métodos agregados a las clases antiguas.
Tanto tu
java.util.Date
comojava.time.Instant
estás en UTC . Si desea ver la fecha y la hora como UTC, que así sea. LlametoString
para generar una cadena en formato estándar ISO 8601 .Para otros formatos, debe transformar su
Instant
en el más flexibleOffsetDateTime
.Vea ese código en vivo en IdeOne.com .
Para obtener una cadena en el formato deseado, especifique a
DateTimeFormatter
. Puede especificar un formato personalizado. Pero usaría uno de los formateadores predefinidos (ISO_LOCAL_DATE_TIME
) y reemplazaría elT
en su salida con un ESPACIO.Por cierto, no recomiendo este tipo de formato en el que pierdes intencionalmente la información de compensación de UTC o zona horaria. Crea ambigüedad en cuanto al significado del valor de fecha y hora de esa cadena.
También tenga cuidado con la pérdida de datos, ya que cualquier segundo fraccionario se ignora (se trunca efectivamente) en la representación de su Cadena del valor de fecha y hora.
Para ver ese mismo momento a través de la lente del reloj de pared de una región en particular , aplique a
ZoneId
para obtener aZonedDateTime
.Para generar una cadena formateada, haga lo mismo que arriba pero reemplace
odt
conzdt
.Si ejecuta este código una gran cantidad de veces, es posible que desee ser un poco más eficiente y evitar la llamada
String::replace
. Descartar esa llamada también hace que su código sea más corto. Si lo desea, especifique su propio patrón de formato en su propioDateTimeFormatter
objeto. Caché esta instancia como una constante o miembro para su reutilización.Aplique ese formateador pasando la instancia.
Sobre java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases sustituyen a las clases de fecha y hora viejas problemáticas tales como
java.util.Date
,.Calendar
, yjava.text.SimpleDateFormat
.El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a java.time.
Para obtener más información, vea el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones.
Gran parte de la funcionalidad java.time se transfiere a Java 6 y 7 en ThreeTen-Backport y se adapta aún más a Android en ThreeTenABP (consulte Cómo usar ... ).
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time.
fuente
Z
se usa en lugar de+00:00
por defecto. Arregle la respuesta, gracias. FYI, esos significan lo mismo:Z
pronunciado "Zulu" significa un desplazamiento de cero horas-minutos-segundos, lo mismo que+00:00
. El estándar ISO 8601 es compatible con ambos estilos.atOffset
método enInstant
la clase en Java 8. Véase Javadoc:Instant::atOffset
. En Java 8,Instant.now().atOffset( ZoneOffset.UTC ).toString()
se ejecutará una llamada como . Revisa tusimport
declaraciones. Verifique que su IDE / proyecto esté configurado para ejecutar Java 8 o posterior en lugar de una versión anterior de Java. Vea el código en vivo en IdeOne.com: ideone.com/2Vm2O5Trazos alternativos en Java simple:
Esto utiliza formateador e indexación relativa en lugar de
SimpleDateFormat
que no sea seguro para subprocesos , por cierto.Ligeramente más repetitivo pero solo necesita una declaración. Esto puede ser útil en algunos casos.
fuente
¿Por qué no usas Joda (org.joda.time.DateTime)? Básicamente es una frase.
fuente
DateTime
objeto.new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
Parece que estás buscando SimpleDateFormat .
Formato: aaaa-MM-dd kk: mm: ss
fuente
HH
(0-23) es más común.En un solo disparo;)
Para obtener la fecha
Para obtener el tiempo
Para obtener la fecha y hora
Feliz codificación :)
fuente
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y Java 9. Consulte el Tutorial de Oracle .fuente
La forma más fácil de usarlo es la siguiente:
donde "aaaa-MM-dd'T'HH: mm: ss" es el formato de la fecha de lectura
salida: dom abr 14 16:11:48 EEST 2013
Notas: HH vs hh - HH se refiere al formato de 24 h - hh se refiere al formato de 12 h
fuente
Si solo necesita el tiempo desde la fecha, puede usar la función de Cadena.
Esto cortará automáticamente la parte de tiempo de la cadena y la guardará dentro de
timeString
.fuente
Estos son ejemplos del uso de la nueva API Java 8 Time para formatear el legado
java.util.Date
:Es bueno
DateTimeFormatter
que se pueda almacenar en caché de manera eficiente ya que es seguro para subprocesos (a diferenciaSimpleDateFormat
).Lista de fomatters predefinidos y referencia de notación de patrón .
Créditos
¿Cómo analizar / formatear fechas con LocalDateTime? (Java 8)
Java8 conversión java.util.Date a java.time.ZonedDateTime
Formato instantáneo a cadena
¿Cuál es la diferencia entre java 8 ZonedDateTime y OffsetDateTime?
fuente
Prueba esto,
Salida:
Para obtener más información sobre el formato de fecha y hora en java, consulte los enlaces a continuación
Centro de ayuda de Oracle
Ejemplo de fecha y hora en java
fuente
fuente
Intentemos esto
O una función de utilidad
De convertir fecha a cadena en Java
fuente
fuente
fuente
Opción de una línea
Esta opción obtiene una línea sencilla para escribir la fecha real.
fuente
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .2019-20-23 09:20:22
- mes 20 ??) (2) No puedo ver que la respuesta proporcione algo que no esté cubierto en otras respuestas. (3) Por favor, no enseñe a los jóvenes a usar laSimpleDateFormat
clase desactualizada y notoriamente problemática . Al menos no como la primera opción. Y no sin ninguna reserva. Hoy tenemos mucho mejor enjava.time
la moderna API de fecha y hora de Java, y suDateTimeFormatter
.