¿Cuál es la mejor manera de convertir a String
en el formato '2 de enero de 2010' a a Date
en Java?
En última instancia, quiero dividir el mes, el día y el año como enteros para poder usar
Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();
para convertir la fecha en hora.
Date
están en desuso.java.util.Date
,java.util.Calendar
yjava.text.SimpleTextFormat
ahora están legado , suplantados por los java.time clases. Ver Tutorial de Oracle .Respuestas:
Ese es el camino difícil, y esos
java.util.Date
métodos de establecimiento han quedado en desuso desde Java 1.1 (1997). Simplemente formatee la fecha usandoSimpleDateFormat
un patrón de formato que coincida con la cadena de entrada .En su caso específico de "2 de enero de 2010" como la cadena de entrada:
MMMM
patrónd
patrón para ello.yyyy
patrón para ello.Tenga en cuenta la importancia del
Locale
argumento explícito . Si lo omite, usará la configuración regional predeterminada que no es necesariamente inglesa como se usa en el nombre del mes de la cadena de entrada. Si la configuración regional no coincide con la cadena de entrada, entonces obtendría una confusajava.text.ParseException
aunque el patrón de formato parezca válido.Aquí hay un extracto de relevancia del javadoc , que enumera todos los patrones de formato disponibles:
Tenga en cuenta que los patrones distinguen entre mayúsculas y minúsculas y que los patrones basados en texto de cuatro caracteres o más representan la forma completa; de lo contrario, se usa una forma corta o abreviada si está disponible. Entonces, por ejemplo,
MMMMM
o más es innecesario.Aquí hay algunos ejemplos de
SimpleDateFormat
patrones válidos para analizar una cadena dada hasta la fecha:Una nota importante es que no
SimpleDateFormat
es seguro para subprocesos. En otras palabras, nunca debe declararlo y asignarlo como una variable estática o de instancia y luego reutilizarlo desde diferentes métodos / hilos. Siempre debe crearlo completamente nuevo dentro del alcance local del método.Actualización de Java 8
Si está en Java 8 o más reciente, use
DateTimeFormatter
(también aquí, haga clic en el enlace para ver todos los formateadores predefinidos y los patrones de formato disponibles; el tutorial está disponible aquí ). Esta nueva API está inspirada en JodaTime .Nota: si su patrón de formato también contiene la parte de tiempo, use en
LocalDateTime#parse(text, formatter)
lugar deLocalDate#parse(text, formatter)
. Y, si su patrón de formato también contiene la zona horaria, useZonedDateTime#parse(text, formatter)
en su lugar.Aquí hay un extracto de relevancia del javadoc , que enumera todos los patrones de formato disponibles:
Tenga en cuenta que tiene varios formateadores predefinidos para los patrones más populares. Entonces, en lugar de
DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
, por ejemplo , podría usarDateTimeFormatter.RFC_1123_DATE_TIME
. Esto es posible porque, por el contrarioSimpleDateFormat
, son seguros para subprocesos. Por lo tanto, también podría definir el suyo propio, si es necesario.Para un formato de cadena de entrada en particular, no necesita usar un explícito
DateTimeFormatter
: una fecha estándar ISO 8601 , como 2016-09-26T17: 44: 57Z, puede analizarse directamenteLocalDateTime#parse(text)
ya que ya usa elISO_LOCAL_DATE_TIME
formateador. Del mismo modo,LocalDate#parse(text)
analiza una fecha ISO sin el componente de tiempo (verISO_LOCAL_DATE
), yZonedDateTime#parse(text)
analiza una fecha ISO con un desplazamiento y una zona horaria añadidos (verISO_ZONED_DATE_TIME
).fuente
O
, cómo dejar que se imprima enUTC+08:00
lugar deGMT+08:00
. No pude obtener ningún ejemplo.20-JUN-16 12.00.00.000000000 AM
, necesito ayuda para convertir esto a Date. ¡¡Su ayuda es muy apreciada!!Ah sí, la discusión de Java Date, de nuevo. Para lidiar con la manipulación de fechas, usamos Date , Calendar , GregorianCalendar y SimpleDateFormat . Por ejemplo, usando su fecha de enero como entrada:
Entonces puedes manipular eso con algo como:
fuente
fuente
Con Java 8 obtenemos una nueva API de fecha / hora ( JSR 310 ).
La siguiente forma se puede usar para analizar la fecha en Java 8 sin depender de Joda-Time :
LocalDate es la clase estándar de Java 8 para representar una fecha (sin hora). Si desea analizar valores que contienen información de fecha y hora, debe usar LocalDateTime . Para valores con zonas horarias, use ZonedDateTime . Ambos proporcionan un
parse()
método similar aLocalDate
:Los caracteres de formato de lista de Datedoc TimeFormatter Javadoc :
fuente
Si bien algunas de las respuestas son técnicamente correctas, no son recomendables.
Esta popular biblioteca gratuita de código abierto se puede utilizar en varias versiones de Java. Muchos ejemplos de su uso se pueden encontrar en StackOverflow. Leer algunos de estos le ayudará a ponerse al día rápidamente.
Este nuevo conjunto de clases está inspirado en Joda-Time y definido por JSR 310. Estas clases están integradas en Java 8. Se está ejecutando un proyecto para respaldar estas clases a Java 7, pero ese respaldo no está respaldado por Oráculo.
fecha tiene una porción de fecha y una porción de hora del día)
El comienzo de un día depende de la zona horaria. Si no puede especificar una zona horaria, se aplica la zona horaria predeterminada de la JVM. Eso significa que el comportamiento de su código puede cambiar cuando se ejecuta en otras computadoras o con una configuración de zona horaria modificada. Probablemente no sea lo que quieres.
regional El idioma de la configuración regional especifica cómo interpretar las palabras (nombre del mes y del día) que se encuentran durante el análisis. (La respuesta de BalusC maneja esto correctamente.) Además, la configuración regional afecta la salida de algunos formateadores al generar una representación de cadena de su fecha y hora.
Joda-Time
Siguen algunas notas sobre Joda-Time.
Zona horaria
En Joda-Time , un objeto DateTime realmente conoce su propia zona horaria asignada. Esto contrasta la clase java.util.Date que parece tener una zona horaria pero no la tiene.
Observe en el código de ejemplo a continuación cómo pasamos un objeto de zona horaria al formateador que analiza la cadena. Esa zona horaria se utiliza para interpretar que la fecha y hora se produjo en esa zona horaria. Por lo tanto, debe pensar y determinar la zona horaria representada por esa entrada de cadena.
Como no tiene una porción de tiempo en su cadena de entrada, Joda-Time asigna el primer momento del día de la zona horaria especificada como la hora del día. Por lo general, esto significa,
00:00:00
pero no siempre, debido al horario de verano (DST) u otras anomalías. Por cierto, puede hacer lo mismo con cualquier instancia de DateTime llamandowithTimeAtStartOfDay
.Patrón formateador
Los caracteres utilizados en el patrón de un formateador son similares en Joda-Time a los de java.util.Date/Calendar pero no son exactamente los mismos. Lea atentamente el documento.
Inmutabilidad
Usualmente usamos las clases inmutables en Joda-Time. En lugar de modificar un objeto Fecha-Hora existente, llamamos a métodos que crean una nueva instancia nueva basada en el otro objeto con la mayoría de los aspectos copiados, excepto donde se deseaban alteraciones. Un ejemplo es la llamada a la
withZone
última línea a continuación. La inmutabilidad ayuda a que Joda-Time sea muy seguro para subprocesos, y también puede hacer que el trabajo sea más claro.Conversión
Necesitará objetos java.util.Date para usar con otras clases / framework que no conozcan los objetos Joda-Time. Afortunadamente, es muy fácil moverse de un lado a otro.
Pasando de un objeto java.util.Date (aquí llamado
date
) a Joda-Time DateTime ...Yendo en la otra dirección desde Joda-Time a un objeto java.util.Date ...
Código de muestra
Cuando corres ...
fuente
Al tratar con la clase SimpleDateFormat, es importante recordar que Date no es seguro para subprocesos y que no puede compartir un solo objeto Date con múltiples subprocesos.
También hay una gran diferencia entre "m" y "M", donde el caso pequeño se usa por minutos y el caso mayúscula se usa por mes. Lo mismo con "d" y "D". Esto puede causar errores sutiles que a menudo se pasan por alto. Consulte Javadoc o la Guía para convertir cadenas a fecha en Java para obtener más detalles.
fuente
Funciona bien para mí.
fuente
Puede usar SimpleDateformat para cambiar la cadena a la fecha
fuente
Además, SimpleDateFormat no está disponible con algunas de las tecnologías del lado del cliente, como GWT .
Es una buena idea ir a Calendar.getInstance (), y su requisito es comparar dos fechas; ir para una cita larga.
fuente
Dos formateadores simples que hemos usado:
Analizamos el formato completo de fecha a hora:
fuente
Mi humilde programa de prueba. Lo uso para jugar con el formateador y buscar fechas largas que encuentro en los archivos de registro (pero quién los ha puesto allí ...).
Mi programa de prueba:
Resultados de la prueba:
fuente
Enlace fuente
Para Android
Calendar.getInstance (). GetTime () da
Utilizar
fuente
Conversión de cadena a fecha:
fuente
Prueba esto
fuente