Pregunta

tengo un String representación de una fecha que necesito para crear una Date o Calendar objeto de.he mirado a través Date y Calendar API, pero no he encontrado nada que pueda hacer esto además de crear mi propio método de análisis feo.Sé que debe haber una manera, ¿alguien conoce alguna solución?

¿Fue útil?

Solución

En breve:

DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
  Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
  e.printStackTrace();
}

Ver SimpleDateFormat javadoc para más.

Y convertirlo en un Calendar, hacer:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

Otros consejos

tl; dr

LocalDate.parse( "2015-01-02" )

java.tiempo

Java 8 y posteriores tienen una nueva java.tiempo marco que hace que estas otras respuestas sean obsoletas.Este marco está inspirado en Tiempo Joda, definido por JSR 310, y ampliado por el TresDiez-Extra proyecto.Ver el Tutorial.

Las antiguas clases empaquetadas, java.util.Date/.Calendar, son notoriamente problemáticas y confusas.Evítales.

LocalDate

Al igual que Joda-Time, java.time tiene una clase LocalDate para representar un valor de solo fecha sin hora del día y sin zona horaria.

ISO 8601

Si su cadena de entrada está en el estándar ISO 8601 formato de yyyy-MM-dd, puede pedirle a esa clase que analice directamente la cadena sin necesidad de especificar un formateador.

Los formatos ISO 8601 se utilizan de forma predeterminada en java.time, tanto para analizar como para generar representaciones de cadenas de valores de fecha y hora.

LocalDate localDate = LocalDate.parse( "2015-01-02" );

Formateador

Si tiene un formato diferente, especifique un formateador del formato.de.hora.java paquete.Puede especificar su propio patrón de formato o dejar que java.time se localice automáticamente según corresponda a un Locale especificando un lenguaje humano para la traducción y normas culturales para decidir cuestiones como punto versus coma.

Patrón de formato

Leer el DateTimeFormatter documento de clase para obtener detalles sobre los códigos utilizados en el patrón de formato.Varían un poco de los viejos y anticuados. java.text.SimpleDateFormat patrones de clase.

Observe cómo el segundo argumento a la parse El método es un referencia del método, sintaxis agregada a Java 8 y posteriores.

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

Volcar a la consola.

System.out.println ( "localDate: " + localDate );

fecha local:2015-01-02

Localizar automáticamente

O en lugar de especificar un patrón de formato, deje que java.time lo localice por usted.Llamar DateTimeFormatter.ofLocalizedDate, y asegúrese de especificar el valor deseado/esperado Locale en lugar de confiar en el valor predeterminado actual de la JVM, que puede cambiar en cualquier momento durante el tiempo de ejecución (!).

String input = "January 2, 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG );
formatter = formatter.withLocale ( Locale.US );
LocalDate localDate = LocalDate.parse ( input , formatter );

Volcar a la consola.

System.out.println ( "input: " + input + " | localDate: " + localDate );

aporte:2 de enero de 2015 | Detate local:2015-01-02

El muy estimado Biblioteca de tiempo Joda También vale la pena echarle un vistazo.Esta es la base para el nuevo API de fecha y hora eso está escrito para Java 7.El diseño es limpio, intuitivo, bien documentada y evita mucha de la torpeza del original java.util.Date / java.util.Calendar clases.

Jodas DateFormatter puede analizar una cadena a un Joda DateTime.

Prueba esto:

DateFormat.parse(String)

El DateFormat la clase tiene un parse método.

Ver http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html para más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top