¿Cómo puedo cambiar el formato de fecha en Java? [duplicar]

Resuelto rasi asked hace 14 años • 10 respuestas

Necesito cambiar el formato de fecha usando Java desde

 dd/MM/yyyy  to yyyy/MM/dd
rasi avatar Aug 12 '10 22:08 rasi
Aceptado

Cómo convertir de un formato de fecha a otro usando SimpleDateFormat :

final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";

// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;

SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d = sdf.parse(oldDateString);
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);
Christopher Parker avatar Aug 12 '2010 16:08 Christopher Parker
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.format(new Date());

Esto debería funcionar

KristofMols avatar Aug 12 '2010 15:08 KristofMols

tl; dr

LocalDate.parse( 
    "23/01/2017" ,  
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK ) 
).format(
    DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK )
)

23/01/2017

Evite clases heredadas de fecha y hora

La respuesta de Christopher Parker es correcta pero está desactualizada. Las antiguas y problemáticas clases de fecha y hora como java.util.Date, java.util.Calendary java.text.SimpleTextFormatahora son heredadas y suplantadas por las clases java.time .

Usando java.time

Analice la cadena de entrada como un objeto de fecha y hora y luego genere un nuevo objeto String en el formato deseado.

La LocalDateclase representa un valor de solo fecha sin hora del día y sin zona horaria.

DateTimeFormatter fIn = DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK );  // As a habit, specify the desired/expected locale, though in this case the locale is irrelevant.
LocalDate ld = LocalDate.parse( "23/01/2017" , fIn );

Defina otro formateador para la salida.

DateTimeFormatter fOut = DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK );
String output = ld.format( fOut );

23/01/2017

Por cierto, considere usar formatos estándar ISO 8601 para cadenas que representan valores de fecha y hora.


Acerca de java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases reemplazan a las antiguas y problemáticas clases de fecha y hora heredadas , como java.util.Date, Calendary SimpleDateFormat.

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases java.time?

  • Java SE 8 , Java SE 9 y posteriores
    • Incorporado.
    • Parte de la API de Java estándar con una implementación incluida.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad java.time está adaptada a Java 6 y 7 en ThreeTen-Backport .
  • Androide
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) específicamente para Android.
    • Consulte Cómo utilizar ThreeTenABP… .

El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como , Interval, y más .YearWeekYearQuarter


Tiempo Joda

ACTUALIZACIÓN: El proyecto Joda-Time ahora está en modo de mantenimiento y el equipo recomienda la migración a las clases java.time . Esta sección se deja aquí por el bien de la historia.

Para divertirse, aquí está su código adaptado para usar la biblioteca Joda-Time .

// © 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.*;

final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";

// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;

DateTimeFormatter formatterOld = DateTimeFormat.forPattern(OLD_FORMAT);
DateTimeFormatter formatterNew = DateTimeFormat.forPattern(NEW_FORMAT);
LocalDate localDate = formatterOld.parseLocalDate( oldDateString );
newDateString = formatterNew.print( localDate );

Volcar a la consola…

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

Cuando se ejecuta...

localDate: 2010-08-12
newDateString: 2010/08/12
Basil Bourque avatar Dec 29 '2013 03:12 Basil Bourque

Utilice formato de fecha simple

    String DATE_FORMAT = "yyyy/MM/dd";
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
    System.out.println("Formated Date " + sdf.format(date));

Ejemplo completo:

import java.text.SimpleDateFormat;
import java.util.Date;

public class JavaSimpleDateFormatExample {
    public static void main(String args[]) {
        // Create Date object.
        Date date = new Date();
        // Specify the desired date format
        String DATE_FORMAT = "yyyy/MM/dd";
        // Create object of SimpleDateFormat and pass the desired date format.
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        /*
         * Use format method of SimpleDateFormat class to format the date.
         */
        System.out.println("Today is " + sdf.format(date));
    }
}
YoK avatar Aug 12 '2010 15:08 YoK

Esta es solo la respuesta de Christopher Parker adaptada para usar las nuevas clases 1 de Java 8:

final DateTimeFormatter OLD_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");
final DateTimeFormatter NEW_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");

String oldString = "26/07/2017";
LocalDate date = LocalDate.parse(oldString, OLD_FORMATTER);
String newString = date.format(NEW_FORMATTER);

1 bueno, ya no es tan nuevo, Java 9 debería lanzarse pronto.

user85421 avatar Jul 26 '2017 15:07 user85421