2010-08-12 76 views

Respuesta

109

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); 
+1

FYI, las antiguas clases problemáticas de fecha y hora como ['java.util.Date'] (https://docs.oracle.com/ javase/8/docs/api/java/util/Date.html), ['java.util.Calendar'] (https://docs.oracle.com/javase/8/docs/api/java/util/Calendar .html) y 'java.text.SimpleTextFormat' ahora son [legacy] (https://en.wikipedia.org/wiki/Legacy_system), suplantado por el [java.time] (https://docs.oracle. com/javase/8/docs/api/java/time/package-summary.html) clases. Consulte [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

9

Uso SimpleDateFormat

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)); 
    } 
} 
+0

¿puedo pasar una cadena hasta la fecha? – rasi

26
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
sdf.format(new Date()); 

Esto debería hacer el truco

+0

tengo una cadena en formato 'dd/MM/aaaa' cómo puedo convertir – rasi

1

o usted podría ir a la ruta de expresiones regulares:

String date = "10/07/2010"; 
String newDate = date.replaceAll("(\\d+)/(\\d+)/(\\d+)", "$3/$2/$1"); 
System.out.println(newDate); 

funciona en ambos sentidos también. Por supuesto, esto no validará su fecha y también funcionará para cadenas como "21432/32423/52352". Puede usar "(\\d{2})/(\\d{2})/(\\d{4}" para ser más exacto en la cantidad de dígitos en cada grupo, pero solo funcionará de dd/MM/aaaa a aaaa/MM/dd y no al revés (y aún acepta números no válidos allí como 45). Y si le das algo no válido como "blabla", devolverá lo mismo.

+3

Ahora tiene dos problemas. ;-) –

3
SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
Date myDate = newDateFormat.parse("28/12/2013"); 
newDateFormat.applyPattern("yyyy/MM/dd") 
String myDateString = newDateFormat.format(myDate); 

ahora MiFecha = 2013/12/28

7

tl;

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

2017/01/23

Evitar el legado clases de fecha y hora dr

El answer by Christopher Parker es correcto pero desactualizado. Las antiguas clases problemáticas de fecha y hora como java.util.Date, java.util.Calendar y java.text.SimpleTextFormat ahora son legacy, suplantadas por las clases java.time.

Usando java.time

analizar la cadena de entrada como un objeto de fecha y hora, a continuación, generar un nuevo objeto String en el formato deseado.

La clase LocalDate representa un valor de fecha solamente 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); 

Define otro formateador para la salida.

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

2017/01/23

Por cierto, considerar el uso de ISO 8601 formatos estándar para cadenas que representan los valores de fecha y hora.


Sobre java.time

El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date, Calendar, & SimpleDateFormat.

El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a las clases java.time.

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

¿Dónde obtener las clases java.time?

El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter y more.


Joda-Time

ACTUALIZACIÓN:Joda-Time El proyecto se encuentra ahora en maintenance mode, con el equipo de asesoramiento migración a los java.time clases. Esta sección aquí queda por el bien de la historia.

Por diversión, 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); 

volcado a la consola ...

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

Cuando ejecute ...

localDate: 2010-08-12 
newDateString: 2010/08/12 
-1
SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd"); 
System.out.println(format1.format(date)); 
1

muchas maneras de cambiar el formato de fecha

private final String dateTimeFormatPattern = "yyyy/MM/dd"; 
private final Date now = new Date(); 

final DateFormat format = new SimpleDateFormat(dateTimeFormatPattern); 
final String nowString = format.format(now); 

final Instant instant = now.toInstant(); 
final DateTimeFormatter formatter = 
     DateTimeFormatter.ofPattern( 
     dateTimeFormatPattern).withZone(ZoneId.systemDefault()); 
final String formattedInstance = formatter.format(instant); 

    /* Java 8 needed*/ 
    LocalDate date = LocalDate.now(); 
    String text = date.format(formatter); 
    LocalDate parsedDate = LocalDate.parse(text, formatter); 
0

Para cambiar el formato de la fecha que ha requerido Ambos formatos de aspecto a continuación.

String stringdate1 = "28/04/2010"; 

try { 

    SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy"); 
    Date date1 = format1.parse() 
    SimpleDateFormat format2 = new SimpleDateFormat("yyyy/MM/dd"); 

    String stringdate2 = format2.format(date1); 
    } catch (ParseException e) { 
    e.printStackTrace(); 
} 

aquí stringdate2 tienen formato de fecha de yyyy/MM/dd. y contiene 2010/04/28.

2

Esto es sólo de Christopher Parker answer adaptado para usar los nuevos clases 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 bien, no es que más nueva, Java 9 debe ser liberado pronto.

Cuestiones relacionadas