formatting Convertir java.util.Date a String




8 Answers

Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
java date formatting java.util.date

Quiero convertir un objeto java.util.Date en una String en Java.

El formato es el 2010-05-30 22:15:52




tl; dr

myUtilDate.toInstant()  // Convert `java.util.Date` to `Instant`.
          .atOffset( ZoneOffset.UTC )  // Transform `Instant` to `OffsetDateTime`.
          .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )  // Generate a String.
          .replace( "T" , " " )  // Put a SPACE in the middle.

2014-11-14 14:05:09

java.time

La forma moderna es con las clases java.time que ahora suplantan a las antiguas y problemáticas clases de fecha y hora.

Primero convierte tu java.util.Date a un Instant . La clase Instant representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds (hasta nueve (9) dígitos de una fracción decimal).

Las conversiones a / desde java.time se realizan mediante nuevos métodos agregados a las clases anteriores.

Instant instant = myUtilDate.toInstant();

Tanto su java.util.Date como java.time.Instant están en UTC . Si quieres ver la fecha y la hora como UTC, que así sea. Llame a toString para generar una cadena en formato estándar ISO 8601 .

String output = instant.toString();  

2014-11-14T14: 05: 09Z

Para otros formatos, necesita transformar su Instant en el OffsetDateTime más flexible.

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

odt.toString (): 2014-11-14T14: 05: 09 + 00: 00

Para obtener una cadena en el formato deseado, especifique un DateTimeFormatter . Podría especificar un formato personalizado. Pero usaría uno de los formateadores predefinidos ( ISO_LOCAL_DATE_TIME ), y reemplazaría la T en su salida con un ESPACIO.

String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14:05:09

Por cierto, no recomiendo este tipo de formato en el que pierde a propósito la información de offset-from-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 fraccional se ignora (se trunca de manera efectiva) 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 alguna región en particular, aplique un ZoneId para obtener un ZonedDateTime .

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

zdt.toString (): 2014-11-14T14: 05: 09-05: 00 [América / Montreal]

Para generar una cadena con formato, haga lo mismo que arriba pero reemplace zdt con zdt .

String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

2014-11-14 14:05:09

Si ejecuta este código una gran cantidad de veces, es posible que desee ser un poco más eficiente y evitar la llamada a String::replace . Al 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 propio objeto DateTimeFormatter . Almacenar en caché esta instancia como una constante o miembro para su reutilización.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );  // Data-loss: Dropping any fractional second.

Aplique ese formateador pasando la instancia.

String output = zdt.format( f );

Acerca de java.time

El marco java.time está integrado en Java 8 y java.time posteriores. Estas clases sustituyen a las antiguas y problemáticas clases de fecha y hora, como java.util.Date , .Calendar , & java.text.SimpleDateFormat .

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

Para obtener más información, consulte el Tutorial de Oracle . Y busca para muchos ejemplos y explicaciones.

Gran parte de la funcionalidad de java.time está respaldada 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 terreno de prueba para posibles adiciones futuras a java.time.




¿Por qué no usas Joda (org.joda.time.DateTime)? Es básicamente una sola línea.

Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");

// output: 2014-11-14 14:05:09



public static String formateDate(String dateString) {
    Date date;
    String formattedDate = "";
    try {
        date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString);
        formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return formattedDate;
}



Si solo necesita la hora de la fecha, puede usar la función Cadena.

Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );

Esto cortará automáticamente la parte del tiempo de la cadena y la guardará dentro de la timeString .




En un solo disparo;)

Para obtener la fecha

String date = new SimpleDateFormat("yyyy-MM-dd",   Locale.getDefault()).format(new Date());

Para obtener el tiempo

String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());

Para obtener la fecha y hora

String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());

Feliz codificacion :)




public static void main(String[] args) 
{
    Date d = new Date();
    SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
    System.out.println(form.format(d));
    String str = form.format(d); // or if you want to save it in String str
    System.out.println(str); // and print after that
}



    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String date = "2010-05-30 22:15:52";
    java.util.Date formatedDate = sdf.parse(date); // returns a String when it is parsed
    System.out.println(sdf.format(formatedDate)); // the use of format function returns a String





Related