78 votes

Suppression du temps d'un objet Date?

Je veux supprimer l'heure de l'objet Date.

DateFormat df;
String date;
df = new SimpleDateFormat("dd/MM/yyyy");
d = eventList.get(0).getStartDate(); // Je récupère la date en utilisant cette méthode
date = df.format(d); // Conversion de la date au format "dd/MM/yyyy"

Mais lorsque je convertis cette date (qui est au format String), elle ajoute également l'heure.

Je ne veux pas du tout l'heure. Ce que je veux, c'est simplement "21/03/2012".

0 votes

Que dit System.out.println(date) juste après la dernière ligne? Cela doit déjà être dans le format souhaité, n'est-ce pas? Sinon, vous n'avez pas réellement posté le code complet. Par exemple, vous pourriez le convertir en objet Date plus tard, ce qui récupérerait l'heure par défaut.

0 votes

Ne récupérez-vous pas juste 21/03/2012 de date?

0 votes

@BalusC ouais....c'est le format désiré..mais quand on convertit la chaîne en date, il ajoute une heure par défaut....que je ne veux pas...

131voto

Sunil Manheri Points 658

Vous pouvez supprimer la partie heure de java.util.Date en mettant les valeurs d'heure, de minute, de seconde et de milliseconde à zéro.

import java.util.Calendar;
import java.util.Date;

public class DateUtil {

    public static Date removeTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

}

7 votes

Cela ne supprime pas la partie horaire, elle la met simplement à zéro.

4 votes

Je voulais aussi cette solution exacte. Merci pour la réponse.

6 votes

Mais si vous souhaitez comparer par date, cela fonctionne en définissant toujours la même heure chaque fois.

53voto

Rangi Lin Points 3636

La réponse rapide est :

Non, vous n'êtes pas autorisé à le faire. Parce que c'est ce que Date utilise.

D'après la javadoc de Date :

La classe Date représente un instant spécifique dans le temps, avec une précision milliseconde.

Cependant, cette classe étant simplement un objet de données. Elle ne se soucie pas de la façon dont nous la décrivons. Quand nous voyons une date 2012/01/01 12:05:10.321, nous pouvons dire que c'est 2012/01/01, c'est ce dont vous avez besoin. Il y a plusieurs façons de faire cela.

Exemple 1 : en manipulant des chaînes de caractères

Chaîne d'entrée : 2012/01/20 12:05:10.321

Chaîne de sortie souhaitée : 2012/01/20

Puisque les yyyy/MM/dd sont exactement ce dont nous avons besoin, nous pouvons simplement manipuler la chaîne pour obtenir le résultat.

String input = "2012/01/20 12:05:10.321";
String output = input.substring(0, 10);  // Résultat : 2012/01/20

Exemple 2 : avec SimpleDateFormat

Chaîne d'entrée : 2012/01/20 12:05:10.321

Chaîne de sortie souhaitée : 01/20/2012

Dans ce cas, nous voulons un format différent.

String input = "2012/01/20 12:05:10.321";
DateFormat inputFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
Date date = inputFormatter.parse(input);

DateFormat outputFormatter = new SimpleDateFormat("MM/dd/yyyy");
String output = outputFormatter.format(date); // Résultat : 01/20/2012

Pour l'utilisation de SimpleDateFormat, consultez la documentation Java de SimpleDateFormat.

0 votes

@Rangi..je veux une sortie sous forme d'objet de date..pas sous forme de chaîne....quand je vais analyser la chaîne de sortie en objet de date, elle ajoutera également l'heure...ce que je ne veux pas......

1 votes

Comme je l'ai dit, vous n'êtes pas autorisé à faire cela, ce n'est pas à cela que sert Date. Vous devez modifier la façon dont vous décrivez l'Date, pas changer l'objet Date.

0 votes

Puis-je lire java.text.DateFormat ou android.text.format.DateFormat ?

42voto

jseals Points 816

Apache Commons DateUtils dispose d'une méthode de "troncature" que je viens d'utiliser pour réaliser cela et je pense qu'elle répondra à vos besoins. C'est vraiment facile à utiliser :

DateUtils.truncate(dateYouWantToTruncate, Calendar.DAY_OF_MONTH);

DateUtils a également toute une série d'autres utilitaires intéressants comme "isSameDay()" et similaires. Allez y jeter un œil ! Cela pourrait vous faciliter la tâche.

7 votes

Ne devrait-il pas être DateUtils.truncate(dateYouWantToTruncate, Calendar.Date); ?

3 votes

Calendar.DATE et Calendar.DAY_OF_MONTH sont marqués comme synonymes dans la documentation de Java.

12voto

user2859573 Points 21

Que diriez-vous de ceci :

    Date aujourd'hui = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

    aujourd'hui = sdf.parse(sdf.format(aujourd'hui));

0 votes

Convertir une date en chaîne de caractères puis la reparser n'est pas une bonne solution lorsqu'il existe déjà une classe disponible (Calendar) pour modifier directement les composants de la date souhaitée.

8voto

Jesper Points 65733

Ce que vous voulez est impossible.

Un objet Date représente un moment "absolu" dans le temps. Vous ne pouvez pas "supprimer la partie temps" de celui-ci. Lorsque vous imprimez directement un objet Date avec System.out.println(date), il sera toujours formaté dans un format par défaut qui inclut l'heure. Vous ne pouvez rien faire pour changer cela.

Au lieu d'essayer de quelque façon d'utiliser la classe Date pour quelque chose pour lequel elle n'a pas été conçue, vous devriez chercher une autre solution. Par exemple, utilisez SimpleDateFormat pour formater la date dans le format souhaité.

Les APIs de date et de calendrier Java ne sont malheureusement pas les classes les mieux conçues de l'API standard de Java. Il existe une bibliothèque appelée Joda-Time qui dispose d'une API beaucoup plus performante et puissante.

Joda-Time possède un certain nombre de classes spéciales pour prendre en charge les dates, les heures, les périodes, les durées, etc. Si vous souhaitez travailler uniquement avec une date sans heure, alors la classe LocalDate de Joda-Time serait ce que vous utiliseriez.

éditer - notez que ma réponse ci-dessus a maintenant plus de 10 ans. Si vous utilisez une version récente de Java (Java 8 ou ultérieure), il est préférable d'utiliser les nouvelles classes standard de date et d'heure dans le package java.time. Il existe de nombreuses classes disponibles qui représentent uniquement une date (jour, mois, année); une date et une heure; juste une heure; etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X