Convertir java.util.Date à la chaîne
16 réponses
en Java, convertissez une Date en chaîne à l'aide d'une chaîne de format:
// Create an instance of SimpleDateFormat used for formatting
// the string representation of date (month/day/year)
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
// Get the date today 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 reportDate = df.format(today);
// Print what date is today!
System.out.println("Report Date: " + reportDate);
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 classepath)
//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
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
de java.temps
La façon moderne est à la java.les classes de temps qui supplantent maintenant les anciennes classes de date-heure gênantes.
convertissez D'abord votre java.util.Date
en Instant
. La classe Instant
représente un moment sur la ligne de temps dans UTC avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).
Conversions vers / à partir de java.le temps est exécuté par de nouvelles méthodes ajoutées aux anciennes classes.
Instant instant = myUtilDate.toInstant();
vos java.util.Date
et java.time.Instant
sont en UTC . Si vous voulez voir la date et l'heure UTC, ainsi soit-il. Appeler toString
pour générer une chaîne de caractères dans la norme ISO 8601 format.
String output = instant.toString();
2014-11-14T14: 05 :09Z
pour les autres formats, vous devez transformer votre Instant
dans le plus flexible OffsetDateTime
.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
odt.toString (): 2014-11-14T14:05:09+00:00
pour obtenir une chaîne dans le format désiré, spécifiez un DateTimeFormatter
. Vous pouvez spécifier un format personnalisé. Mais j'utiliserais un des formateurs prédéfinis( ISO_LOCAL_DATE_TIME
), et remplacer le T
dans sa sortie par un espace.
String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
soit dit en passant, je ne recommande pas ce type de format où vous perdez volontairement les informations offset-from-UTC ou fuseau horaire. Crée une ambiguïté quant à la signification de la valeur date-Heure de cette chaîne.
aussi méfiez-vous de la perte de données, car n'importe quelle fraction de seconde est ignorée (effectivement tronquée) dans la représentation de votre chaîne de la valeur date-temps.
pour voir ce même moment à travers la lentille d'une région particulière wall-clock time , appliquer un 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[America/Montreal]
pour générer une chaîne formatée, faites la même chose que 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 pouvez vouloir être un peu plus efficace et éviter l'appel à String::replace
. Laisser tomber cet appel fait aussi votre code plus court. Si vous le souhaitez, spécifiez votre propre formatage dans votre propre objet DateTimeFormatter
. Cache cette instance en tant que constante ou membre à réutiliser.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ); // Data-loss: Dropping any fractional second.
appliquer ce formatteur en passant l'instance.
String output = zdt.format( f );
à propos de java.temps
Le de java.time framework est construit dans Java 8 et plus tard. Ces classes supplantent les anciennes classes de date ennuyeuses telles que java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers java.temps.
pour en savoir plus, voir le Oracle Tutorial . Et rechercher le débordement de la pile pour de nombreux exemples et explications.
Beaucoup de Java.la fonctionnalité time est rétroportée à Java 6 & 7 dans ThreeTen-Backport et ensuite adaptée à Android dans ThreeTenABP (voir 15191310920" comment utiliser... ).
le projet ThreeTen-Extra étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'expérimentation pour d'éventuelles futures additions à java.temps.
Alternative one-liners en plain old java:
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);
utilise formater et indexation relative au lieu de SimpleDateFormat
qui est non thread-safe , btw.
légèrement plus répétitif, mais ne nécessite qu'une seule déclaration. Cela peut être pratique dans certains cas.
Pourquoi n'utilisez-vous pas Joda (org.joda.temps.DateTime)? En gros, c'est 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
on dirait que vous cherchez SimpleDateFormat .
Format: AAAA-MM-JJ kk: mm: ss
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;
}
La meilleure façon 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 Apr 14 16: 11 :48 EEST 2013
Notes: HH vs hh - HH se réfère au format de temps 24h - HH se réfère au format de temps 12h
si vous n'avez besoin que de l'heure à partir de la date, vous pouvez simplement utiliser la fonction String.
Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );
cela coupera automatiquement la partie temporelle de la chaîne et la sauvera à l'intérieur du timeString
.
Voici des exemples d'utilisation de la nouvelle Java 8 time API au format legacy 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
C'est gentil à propos de DateTimeFormatter
qu'il peut être efficacement mis en cache comme il n'est pas thread-safe (à la différence de SimpleDateFormat
).
Liste de prédéfinis formateurs et le modèle de notation de référence .
crédits:
Comment faire analyser / formater les dates avec LocalDateTime? (Java 8)
Java8 java.util.Conversion de Date en java.temps.ZonedDateTime
Quelle est la différence entre java 8 ZonedDateTime et OffsetDateTime?
Essayez cette,
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 en savoir plus sur le formatage date et heure en java, reportez-vous aux liens ci-dessous
en tir simple ;)
pour obtenir la Date
String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
Pour obtenir le Temps
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());
codage Heureux :)
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
}
essayons
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 d'utilité
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;
}
à Partir de Convertir une Date en Chaîne de caractères en Java
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