Comment convertir la date actuelle en chaîne en java?

Réponses:

216
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
Ian Purton
la source
Utilisé une combinaison de ceci et de la réponse juste en dessous pour la chaîne de temps. C:
php_coder_3809625
@Ian Purton La date de la chaîne est-elle en UTC tz ..?
Kanagavelu Sugumar
Pour info, ces classes gênantes sont désormais héritées, supplantées par les classes java.time. Voir le didacticiel 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());
}

Pris d' ici

Itay Karo
la source
Meilleure réponse pour utiliser le calendrier au lieu de la date.
Aléatoire
5
Je suis confus. Dans quel univers est Calendarplus souhaitable que Date?
jasonmp85
1
Pour info, ces classes gênantes sont désormais héritées, supplantées par les classes java.time. Voir le didacticiel Oracle .
Basil Bourque
27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();
jasonmp85
la source
58
Eh bien désolé d'avoir dépassé.
jasonmp85
2
Le format utilisé par cette méthode est terrible. De plus, le fuseau horaire par défaut actuel de votre KVM est implicitement appliqué, vos résultats varieront donc. Et ces classes gênantes sont désormais héritées, supplantées par les classes java.time. Voir le didacticiel Oracle .
Basil Bourque
19

Utilisez une DateFormatimplémentation; par exemple SimpleDateFormat.

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String data = df.format(new Date());
Adamski
la source
Pour info, ces classes gênantes sont désormais héritées, supplantées par les classes java.time. Voir le didacticiel Oracle .
Basil Bourque
14

tl; dr

LocalDate.now()
         .toString() 

23/01/2017

Mieux vaut spécifier explicitement le fuseau horaire souhaité / attendu.

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

java.time

La méthode moderne à partir de Java 8 et versions ultérieures consiste à utiliser le framework java.time .

Spécifiez le fuseau horaire, car la date varie dans le monde à un moment donné.

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

23/01/2017

Par défaut, vous obtenez une chaîne au format standard ISO 8601 .

Pour les autres formats, utilisez la java.time.format.DateTimeFormatterclasse.


À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date, Calendar, &SimpleDateFormat .

Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .

Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de java.sql.*classes.

Où obtenir les classes java.time?

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval, YearWeek, YearQuarteret plus .

Basil Bourque
la source
9

Plus rapide :

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));
Johann Goulley
la source
4
Nécessite org.apache.commons
Josiah Yoder
1

Pour le temps comme AAAA-MM-jj

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

Et la bibliothèque de DateTime est:

import org.joda.time.DateTime;


la source
Et de quelle bibliothèque DateTimeprovient-il? Une réponse sur Stack Overflow devrait avoir des explications car ce site est censé être plus qu'une bibliothèque d'extraits de code.
Basil Bourque
0

La plupart des réponses sont / étaient valides. La nouvelle modification de l'API JAVA pour la gestion des dates a permis de réduire certaines ambiguïtés antérieures dans la gestion des dates Java.

Vous recevrez un message obsolète pour des appels similaires.

new Date() // deprecated

L'appel ci-dessus a demandé au développeur de supposer qu'un nouvel objet Date donnera l'objet Date avec l'horodatage actuel. Ce comportement n'est pas cohérent dans les autres classes d'API Java.

La nouvelle façon de procéder consiste à utiliser l' instance de calendrier .

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

Ici aussi, la convention de dénomination n'est pas parfaite mais elle est bien organisée. Pour une personne comme moi qui a du mal à agresser les choses mais qui n'oublierait jamais quelque chose si cela semble logique, c'est une bonne approche.

C'est plus synonyme de la vraie vie

  1. Nous obtenons un objet Calendar et nous cherchons l'heure qu'il contient. (vous devez vous demander qu'aucun corps n'obtienne du temps à partir d'un calendrier, c'est pourquoi j'ai dit que ce n'est pas parfait, mais c'est un sujet complètement différent)
  2. Ensuite, nous voulons la date dans un format texte simple, nous utilisons donc une classe utilitaire SimpleDateFormat qui nous aide à formater la date de l'étape 1. J'ai utilisé aaaa, MM, jj comme paramètres du format. Paramètres de format de date pris en charge

Une autre façon de faire est d'utiliser l'API Joda time

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

ou le plus évident

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

les deux renverront le même résultat.

Swapnil Vargaonkar
la source
Pour votre information, les classes date de temps anciens gênants tels que java.util.Date, java.util.Calendaret java.text.SimpleTextFormatsont maintenant héritage , supplanté par les java.time classes. De plus, le projet Joda-Time est maintenant en mode maintenance , l'équipe conseillant la migration vers java.time.
Basile Bourque
1
@BasilBourque C'est ce que je voulais dire dans ma réponse, que la réponse la plus votée est juste mais pas pertinente pour un développeur actuel. Enfin, java aura une classe Clock et Clock.getTime () serait beaucoup plus sensible et imitant la vie réelle que les classes Date ou DateTime ou Time. Les développeurs Java doivent savoir que OOPS a commencé comme quelque chose qui imite des scénarios réels.
Swapnil Vargaonkar
Pour info, l' Clockimplémentation dans Java 8 est exactement la même que les classes héritées. Ce n'est qu'en Java 9 qu'une nouvelle implémentation arrive, capable de capturer l'instant actuel avec une résolution aussi fine que la nanoseconde.
Basil Bourque
Oui, c'est la raison pour laquelle j'ai écrit "enfin" Java aura une classe Clock qui imitera le scénario de la vie réelle (concept OOPS) et afficher / capturer (comme vous préféreriez le dire) le moment actuel.
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
la source
1
Quelques explications sur ce morceau de code seraient probablement utiles.
Pyves
1
La réponse n'est pas pertinente par rapport à la question. Et non, vous ne pouvez pas transmettre la date dans n'importe quel Stringformat à votre fonction.
Jerin Joseph