Je veux convertir un objet Java.util.Date
en un objet String
en Java.
Le format est 2010-05-30 22:15:52
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);
_
Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
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");
_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
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 );
_
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.
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.
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
Il semble que vous cherchiez SimpleDateFormat .
Format: aaaa-MM-jj kk: mm: ss
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 :)
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
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
Quelle est la différence entre Java 8 ZonedDateTime et OffsetDateTime?
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 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
.
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.
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
Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);
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;
}
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
}
option OneLine
Cette option permet d’écrire facilement une ligne sur une ligne.
Notez que ceci utilise
Calendar.class
etSimpleDateFormat
, 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());