¿Cómo convertir la fecha actual en una cadena en java?

Respuestas:

215
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
Ian Purton
fuente
Usé una combinación de esto y la respuesta que se encuentra a continuación para la cadena de tiempo. C:
php_coder_3809625
@Ian Purton ¿Está la fecha de la cadena en UTC tz ..?
Kanagavelu Sugumar
Para su información, estas clases problemáticas ahora son heredadas, suplantadas por las clases java.time. Consulte el tutorial de Oracle .
Basil Bourque
62
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

Tomado de aqui

Itay Karo
fuente
La mejor respuesta para usar Calendario en lugar de Fecha.
Aleatorio
5
Estoy confundido. ¿En qué universo es Calendarmás deseable que Date?
jasonmp85
1
Para su información, estas clases problemáticas ahora son heredadas, suplantadas por las clases java.time. Consulte el tutorial de Oracle .
Basil Bourque
27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();
jasonmp85
fuente
58
Bueno, lo siento por excederse.
jasonmp85
2
El formato utilizado por ese método es terrible. Además, la zona horaria predeterminada actual de su KVM se aplica implícitamente, por lo que sus resultados variarán. Y estas clases problemáticas ahora son heredadas, suplantadas por las clases java.time. Consulte el tutorial de Oracle .
Basil Bourque
19

Utilice una DateFormatimplementación; ej SimpleDateFormat.

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String data = df.format(new Date());
Adamski
fuente
Para su información, estas clases problemáticas ahora son heredadas, suplantadas por las clases java.time. Consulte el tutorial de Oracle .
Basil Bourque
14

tl; dr

LocalDate.now()
         .toString() 

2017-01-23

Es mejor especificar explícitamente la zona horaria deseada / esperada.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

La forma moderna a partir de Java 8 y versiones posteriores es con el marco java.time .

Especifique la zona horaria, ya que la fecha varía en todo el mundo en un momento dado.

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

2017-01-23

De forma predeterminada, obtiene una cadena en formato estándar ISO 8601 .

Para otros formatos use la java.time.format.DateTimeFormatterclase.


Acerca de java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date, Calendar, ySimpleDateFormat .

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 .

Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No se necesitan cuerdas, no se necesitan java.sql.*clases.

¿Dónde obtener las clases java.time?

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

Albahaca Bourque
fuente
9

Más rápido :

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));
Johann Goulley
fuente
4
Requiere org.apache.commons
Josiah Yoder
1

Para un tiempo como AAAA-MM-dd

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

Y la biblioteca de DateTime es:

import org.joda.time.DateTime;


fuente
¿Y de qué biblioteca es DateTime? Una respuesta sobre el desbordamiento de pila debe tener alguna explicación, ya que este sitio está destinado a ser más que una biblioteca de fragmentos.
Basil Bourque
0

La mayoría de las respuestas son / fueron válidas. La nueva modificación de la API de JAVA para el manejo de fechas aseguró que se redujera alguna ambigüedad anterior en el manejo de fechas de Java.

Recibirá un mensaje obsoleto para llamadas similares.

new Date() // deprecated

La llamada anterior hizo que el desarrollador asumiera que un nuevo objeto Date dará al objeto Date con la marca de tiempo actual. Este comportamiento no es coherente en otras clases de API de Java.

La nueva forma de hacer esto es usando la Instancia de Calendario .

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

Aquí también la convención de nomenclatura no es perfecta, pero está muy organizada. Para una persona como yo que tiene dificultades para asaltar cosas pero que nunca olvidaría algo si suena / parece lógico, este es un buen enfoque.

Esto es más sinónimo de la vida real.

  1. Obtenemos un objeto Calendario y buscamos la hora en él. (Debes preguntarte que nadie obtiene tiempo de un Calendario, por eso dije que no es perfecto, pero ese es un tema completamente diferente)
  2. Luego, queremos la fecha en un formato de texto simple, por lo que usamos una clase de utilidad SimpleDateFormat que nos ayuda a formatear la fecha del paso 1. He usado aaaa, MM, dd como parámetros en el formato. Parámetros de formato de fecha admitidos

Una forma más de hacer esto es usando Joda Time API

new DateTime().toString("yyyy-MM-dd")

o lo más obvio

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

ambos devolverán el mismo resultado.

Swapnil Vargaonkar
fuente
Para su información, las clases de fecha y hora viejas problemáticas tales como java.util.Date, java.util.Calendary java.text.SimpleTextFormatahora están legado , suplantados por los java.time clases. Además, el proyecto Joda-Time está ahora en modo de mantenimiento , y el equipo aconseja la migración a java.time.
Basil Bourque
1
@BasilBourque Eso es lo que quise decir en mi respuesta, que la respuesta más votada es correcta pero no relevante para un desarrollador actual. Finalmente, Java tendrá una clase Clock y Clock.getTime () sería mucho más sensato e imitador de la vida real que las clases Date o DateTime u Time. Los desarrolladores de Java necesitan saber que OOPS comenzó como algo que imita escenarios de la vida real.
Swapnil Vargaonkar
Para su información, la Clockimplementación en Java 8 es exactamente la misma que la de las clases heredadas. Solo en Java 9 llega una nueva implementación, capaz de capturar el momento actual con una resolución tan fina como nanosegundos.
Basil Bourque
Sí, esa es la razón por la que escribí "finalmente" Java tendrá una clase Clock que imitará el escenario de la vida real (concepto OOPS) y mostrará / capturará (la forma en que preferiría decirlo) el momento actual.
Swapnil Vargaonkar
-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }

            return dateObj;
        }

    }
Ganesh Reddy
fuente
1
Probablemente, algunas explicaciones sobre este código serían beneficiosas.
Pyves
1
La respuesta no es relevante para la pregunta. Y no, no puede pasar la fecha en ningún Stringformato a su función.
Jerin Joseph