web-dev-qa-db-fra.com

Convertir Java.util.Date en chaîne

Je veux convertir un objet Java.util.Date en un objet String en Java.

Le format est 2010-05-30 22:15:52

386
novicePrgrmr

Convertissez une date en une chaîne en utilisant DateFormat#format méthode:

_String pattern = "MM/dd/yyyy HH:mm:ss";

// Create an instance of SimpleDateFormat used for formatting 
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);

// Get the today date using Calendar object.
Date today = Calendar.getInstance().getTime();        
// Using DateFormat format method we can create a string 
// representation of a date with the defined format.
String todayAsString = df.format(today);

// Print the result!
System.out.println("Today is: " + todayAsString);
_

De http://www.kodejava.org/examples/86.html

733
Ali Ben Messaoud
Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
211
Charlie Salts

Commons-lang DateFormatUtils est plein de goodies (si vous avez commons-lang dans votre chemin de classe)

//Formats a date/time into a specific pattern
 DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
62
webpat

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 méthode moderne consiste à utiliser les classes Java.time qui supplantent maintenant les anciennes classes fastidieuses héritées.

Commencez par convertir votre _Java.util.Date_ en Instant. La classe Instant représente un moment sur la timeline en UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une décimale fraction).

Les conversions de/vers Java.time sont effectuées par de nouvelles méthodes ajoutées aux anciennes classes.

_Instant instant = myUtilDate.toInstant();
_

Vos _Java.util.Date_ et _Java.time.Instant_ sont tous deux dans UTC . Si vous voulez voir la date et l'heure en UTC, qu'il en soit ainsi. Appelez toString pour générer une chaîne au format standard ISO 8601 .

_String output = instant.toString();  
_

2014-11-14T14: 05: 09Z

Pour les autres formats, vous devez transformer votre Instant en un fichier plus flexible OffsetDateTime .

_OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
_

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

Pour obtenir une chaîne au format souhaité, spécifiez DateTimeFormatter . Vous pouvez spécifier un format personnalisé. Mais je voudrais utiliser l'un des formateurs prédéfinis ( ISO_LOCAL_DATE_TIME ) et remplacer le T dans sa sortie par un SPACE.

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

2014-11-14 14:05:09

En passant, je ne recommande pas ce type de format dans lequel vous perdez volontairement les informations offset-from-UTC ou le fuseau horaire. Crée une ambiguïté quant à la signification de la valeur date-heure de cette chaîne.

Méfiez-vous également des pertes de données, car chaque fraction de seconde est ignorée (effectivement tronquée) dans la représentation de votre chaîne de la valeur date-heure.

Pour voir le même moment à travers l’objectif de la zone horloge murale de la région, appliquez ZoneId pour obtenir un ZonedDateTime.

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

zdt.toString (): 2014-11-14T14: 05: 09-05: 00 [Amérique/Montréal]

Pour générer une chaîne formatée, procédez comme ci-dessus, mais remplacez odt par zdt.

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

2014-11-14 14:05:09

Si vous exécutez ce code un très grand nombre de fois, vous voudrez peut-être être un peu plus efficace et éviter l'appel à _String::replace_. Le fait de laisser cet appel raccourcit également votre code. Si vous le souhaitez, spécifiez votre propre modèle de formatage dans votre propre objet DateTimeFormatter. Cachez cette instance en tant que constante ou membre pour la réutilisation.

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

Appliquez ce formateur en passant l'instance.

_String output = zdt.format( f );
_

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date-heure, telles que Java.util.Date , .Calendar , & Java.text.SimpleDateFormat =.

Le projet Joda-Time , actuellement en mode maintenance , conseille la migration vers Java.time.

Pour en savoir plus, voir le Tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications.

Une grande partie de la fonctionnalité Java.time est rétroportée sur Java 6 & 7 dans ThreeTen-Backport ​​et est ensuite adaptée à Android in ThreeTenABP (voir Comment utiliser… ).

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time.

21
Basil Bourque

Altenative one-liners en Java ancien:

String.format("The date: %tY-%tm-%td", date, date, date);

String.format("The date: %1$tY-%1$tm-%1$td", date);

String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);

String.format("The date and time in ISO format: %tF %<tT", date);

Ceci utilise Formatter et indexation relative au lieu de SimpleDateFormat qui est non compatible avec les threads , btw.

Un peu plus répétitif mais nécessite juste une déclaration. Cela peut être utile dans certains cas.

15
Vadzim

Pourquoi n'utilisez-vous pas Joda (org.joda.time.DateTime)? C'est fondamentalement un one-liner.

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

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

Il semble que vous cherchiez SimpleDateFormat .

Format: aaaa-MM-jj kk: mm: ss

7
pickypg

En un seul coup;)

pour obtenir la date

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

pour avoir l'heure

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

pour obtenir la date et l'heure

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

Bonne codage :)

5
Chanaka Fernando

La façon la plus simple de l’utiliser est la suivante:

currentISODate = new Date().parse("yyyy-MM-dd'T'HH:mm:ss", "2013-04-14T16:11:48.000");

où "aaaa-MM-jj'T'HH: mm: ss" est le format de la date de lecture

sortie: Dim 14 avr 16:11:48 EEST 2013

Remarques: HH vs hh - HH se réfère au format horaire 24h - hh se réfère au format horaire 12h

4
Rami Sharaiyri

Voici des exemples d'utilisation de new API Java 8 Time au format héritéJava.util.Date:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z")
        .withZone(ZoneOffset.UTC);
    String utcFormatted = formatter.format(date.toInstant()); 

    ZonedDateTime utcDatetime = date.toInstant().atZone(ZoneOffset.UTC);
    String utcFormatted2 = utcDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z"));
    // gives the same as above

    ZonedDateTime localDatetime = date.toInstant().atZone(ZoneId.systemDefault());
    String localFormatted = localDatetime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
    // 2011-12-03T10:15:30+01:00[Europe/Paris]

    String nowFormatted = LocalDateTime.now().toString(); // 2007-12-03T10:15:30.123

Il est intéressant de noter que DateTimeFormatter peut être efficacement mis en cache car il est thread-safe (contrairement à SimpleDateFormat).

Liste des noms prédéfinis et des références de notation de modèle .

Crédits:

Comment analyser/formater les dates avec LocalDateTime? (Java 8)

Conversion de Java8 Java.util.Date en Java.time.ZonedDateTime

Format Instant to String

Quelle est la différence entre Java 8 ZonedDateTime et OffsetDateTime?

4
Vadzim
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;
}
4
Ashish Tiwari

Si vous avez seulement besoin de l'heure à partir de la date, vous pouvez simplement utiliser la fonctionnalité de String.

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

Ceci coupera automatiquement la partie heure de la chaîne et la sauvegardera à l'intérieur de la timeString.

4
funaquarius24

Essaye ça,

import Java.text.ParseException;
import Java.text.SimpleDateFormat;

public class Date
{
    public static void main(String[] args) 
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = "2013-05-14 17:07:21";
        try
        {
           Java.util.Date dt = sdf.parse(strDate);         
           System.out.println(sdf.format(dt));
        }
        catch (ParseException pe)
        {
            pe.printStackTrace();
        }
    }
}

Sortie:

2013-05-14 17:07:21

Pour plus d'informations sur le formatage de la date et de l'heure dans Java, reportez-vous aux liens ci-dessous.

Centre d'aide Oracle

Exemple de date et heure en Java

2
Shiva
    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
1
Dulith De Costa
Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);
1
jujuBee

Essayons ça

public static void main(String args[]) {

    Calendar cal = GregorianCalendar.getInstance();
    Date today = cal.getTime();
    DateFormat df7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    try {           
        String str7 = df7.format(today);
        System.out.println("String in yyyy-MM-dd format is: " + str7);          
    } catch (Exception ex) {
      ex.printStackTrace();
    }
}

Ou une fonction utilitaire

public String convertDateToString(Date date, String format) {
    String dateStr = null;
    DateFormat df = new SimpleDateFormat(format);

    try {
        dateStr = df.format(date);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return dateStr;
}

De convertir la date en chaîne en Java

1
David Pham
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
}
1
Artanis

option OneLine

Cette option permet d’écrire facilement une ligne sur une ligne.

Notez que ceci utilise Calendar.class et SimpleDateFormat, et il n'est alors pas logique de l'utiliser sous Java8.

yourstringdate =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());