Depuis le Java.util.Date
l'objet stocke la date sous la forme 2014-01-24 17:33:47.214
, mais je veux que le format de la date soit 2014-01-24 17:33:47
. Je veux supprimer la partie en millisecondes.
J'ai vérifié une question liée à ma question ...
Comment supprimer la partie sous-secondes de l'objet Date
J'ai essayé la réponse donnée
long time = date.getTime();
date.setTime((time / 1000) * 1000);
mais j'ai le format de date de mon résultat comme 2014-01-24 17:33:47.0
. Comment puis-je supprimer ce 0
de mon format de date ???
La réponse de base est, vous ne pouvez pas. La valeur renvoyée par Date#toString
est une représentation de l'objet Date
et il ne comporte aucun concept de format autre que celui qu'il utilise en interne pour la méthode toString
.
En général, cela ne doit pas être utilisé à des fins d'affichage (sauf en de rares occasions)
Au lieu de cela, vous devriez utiliser une sorte de DateFormat
Par exemple...
Date date = new Date();
System.out.println(date);
System.out.println(DateFormat.getDateTimeInstance().format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date));
Sortira quelque chose comme ...
Thu Jan 30 16:29:31 EST 2014
30/01/2014 4:29:31 PM
30/01/14 4:29 PM
30/01/2014 4:29:31 PM
30 January 2014 4:29:31 PM
Si vous êtes vraiment bloqué, vous pouvez le personnaliser davantage en utilisant un SimpleDateFormat
, mais j'éviterais cela si vous le pouvez, car tout le monde n'utilise pas le même format de date/heure;)
Coupez la fraction de seconde.
myJavaUtilDate.toInstant() // Convert from legacy class to modern class. Returns a `Instant` object.
.truncatedTo( ChronoUnit.SECONDS ) // Generate new `Instant` object based on the values of the original, but chopping off the fraction-of-second.
Masquez la fraction de seconde lors de la génération d'un String
.
myJavaUtilDate.toInstant() // Convert from legacy class to modern class. Returns a `Instant` object.
.atOffset( ZoneOffset.UTC ) // Return a `OffsetDateTime` object.
.format( DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ). // Ask the `OffsetDateTime` object to generate a `String` with text representing its value, in a format defined in the `DateTimeFormatter` object.
Vous utilisez d'anciennes classes de date-heure gênantes, désormais héritées, supplantées par les classes Java.time.
Instant
Convertissez votre ancien Java.util.Date
s'oppose à un Java.time.Instant
en appelant une nouvelle méthode ajoutée à l'ancienne classe.
Instant instant = myJavaUtilDate.toInstant() ;
Si vous souhaitez modifier la valeur des données elles-mêmes pour supprimer la fraction de seconde, vous pouvez tronquer. Les classes Java.time utilisent objets immuables , nous générons donc un nouvel objet plutôt que de modifier (muter) l'original.
Instant instantTruncated = instant.truncatedTo( ChronoUnit.SECONDS );
Si, au lieu de tronquer, vous souhaitez simplement supprimer l'affichage des secondes fractionnaires lors de la génération d'une chaîne représentant la valeur date-heure, définissez un formateur adapté à vos besoins.
Par exemple, "uuuu-MM-jj HH: mm: ss" ne fait aucune mention d'une fraction de seconde, de sorte que les millisecondes contenues dans les données n'apparaissent tout simplement pas dans la chaîne générée.
Convertissez Instant
en OffsetDateTime
pour un formatage plus flexible.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC )
String output = odt.format( f );
Notez que votre question ignore le problème du fuseau horaire. Si vous avez l'intention d'utiliser UTC, le code ci-dessus fonctionne car Date
et Instant
sont par définition en UTC. Si, au contraire, vous voulez percevoir les données données à travers la lentille d'une région heure de l'horloge murale , appliquez un fuseau horaire. Recherche de débordement de pile pour les noms de classe ZoneId
et ZonedDateTime
pour beaucoup plus d'informations.
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent l'ancien hérité classes date-heure telles que Java.util.Date
, Calendar
, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers Java.time = classes.
Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 31 .
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.*
Des 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 de futurs ajouts possibles à Java.time. Vous pouvez trouver ici des classes utiles telles que Interval
, YearWeek
, YearQuarter
, et plus .
Vous pouvez utiliser SimpleDateFormatter
. Veuillez consulter le code suivant.
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
Date now = date.getTime();
System.out.println(formatter.format(now));
Utilisez DateUtils d'Apache:
import org.Apache.commons.lang.time.DateUtils;
...
DateUtils.truncate(new Date(), Calendar.SECOND)
Tronquer en secondes (sans millisecondes), renvoyer une nouvelle date:
public Date truncToSec(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.MILLISECOND, 0);
Date newDate = c.getTime();
return newDate;
}
Vous pouvez utiliser la classe SimpleDateFormat
pour formater la date si nécessaire. En raison de la diversité des combinaisons possibles, je vais simplement inclure le lien de documentation ici:
http://docs.Oracle.com/javase/7/docs/api/Java/text/SimpleDateFormat.html
Votre code ressemblera à quelque chose comme ceci:
System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(date));
Juste pour mémoire, la réponse acceptée donnée au poste que vous avez lié fonctionne:
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("S");
Date d = new Date();
System.out.println(df.format(d));
Calendar c = Calendar.getInstance();
c.set(Calendar.MILLISECOND, 0);
d.setTime(c.getTimeInMillis());
System.out.println(df.format(d));
}