Comment faire pour supprimer l'Heure, la Minute et la Seconde à partir de l'Époque d'horodatage
J'ai besoin d'écrire une fonction qui accepte un java.util.Date
et supprime les heures, les minutes et les millisecondes de il UTILISANT que des MATHS (pas de Date de formatage, pas de Calendrier des objets, etc.):
private Date getJustDateFrom(Date d) {
//remove hours, minutes, and seconds, then return the date
}
Le but de cette méthode est d'obtenir la date à partir d'une valeur en millisecondes, sans le temps.
Voici ce que j'ai à ce jour:
private Date getJustDateFrom(Date d) {
long milliseconds = d.getTime();
return new Date(milliseconds - (milliseconds%(1000*60*60)));
}
Le problème est, ce ne supprime que les minutes et les secondes. Je ne sais pas comment faire pour supprimer heures.
Si je ne milliseconds - (milliseconds%(1000*60*60*23))
, puis il remonte à 23:00 heures le jour précédent.
EDIT:
Voici une autre solution:
public static Date getJustDateFrom(Date d) {
Calendar c = Calendar.getInstance();
c.setTime(d);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
return c.getTime();
}
Cette solution d'être affectés par les différences de fuseau horaire entre le client/serveur côtés de mon application?
Calendar
'obtenir.faut-il toujours aller à 23:00 le jour précédent? Si c'est le cas, ne pouvez-vous pas simplement ajouter 1 heure?
J'ai lu que
Calendar
objet prend le fuseau horaire en considération. J'ai une application web qui obtient ce Jour l'objet d'un client, et je ne veux pas qu'il soit touché par les fuseaux horaires.cela semble un peu hacky. Je ne veux pas que ce soit affecté par les années bissextiles ou de l'heure d'été.
Vous êtes à essayer de calculer une date à partir de millisecondes. Les années bissextiles vont devoir être pris en compte
OriginalL'auteur Churro | 2013-10-01
Vous devez vous connecter pour publier un commentaire.
Il y a 24 heures dans une journée. Utilisation millisecondes%(1000*60*60*24).
Tue Oct 01 11:15:08 PDT 2013
:Mon Sep 30 17:00:00 PDT 2013
Eh bien, comme vous l'avez dit, que vous essayez d'éviter de l'heure d'été ajustements. Je crois que vous trouverez qu'17:00:00 PDT est minuit GMT. C'EST la réponse à la question que vous avez demandé... peut-être vous poser la mauvaise question.
Vous avez raison, j'ai peut-être se poser la mauvaise question. La base du problème, c'est que je veux la Date millisecondes sans le temps. Peut-être que je devrais prendre une approche différente?
Oui. Utilisation De L'Application Calendrier. Plus précisément, GregorianCalendar aurez beaucoup de fonctions que vous aurez envie de traiter avec les fuseaux horaires, les années bissextiles, etc.
Je vous remercie pour votre aide. Je suis à l'aide de
Calendar
maintenant.OriginalL'auteur Mark Bailey
Tout simplement pas possible par votre définition.
Une milliseconde timestamp représente millisecondes écoulées à partir d'un point fixe dans le temps (1970-01-01 00:00:00.000 UTC, si je me souviens bien). Cet horodatage ne peut pas être convertie en une date + heure sans spécifier le fuseau horaire pour convertir en.
Vous ne pouvez donc arrondir le timestamp de jours à l'égard d'un fuseau horaire, pas en général. Donc, tout de jongler avec la Date.getTime() et ne prenant pas en compte le fuseau horaire est garanti de travailler dans un seul fuseau horaire - celui que vous avez codé en dur pour.
Faire vous-même une faveur et à l'utilisation d'un Calendrier.
Date
s trop bien, et vous devez utiliser unCalendar
.OriginalL'auteur Durandal
Vous pouvez faire usage de apache commons lang DateUtils helper classe utilitaire.
Par exemple, si vous aviez la date du 28 mars 2002
13:45:01.231, si vous avez passé avec Calendrier.HEURE, il serait de retour le 28 mars
2002 13:00:00.000. Si c'était passé avec Calendrier.MOIS, il serait
de retour le 1er mars 2002 0:00:00.000.
Vous pouvez télécharger commons lang pot à http://commons.apache.org/proper/commons-lang/
OriginalL'auteur mnm