Décalage d'un mois sur la date de modification d'un fichier

Le
Marc Mendez
Bonjour,

Sous Win2003 server (X86), je constate un problème sur la récupération de la
date de modification d'un fichier. En effet, celle-ci est décalée d'un mois.
J'utilise les instructions suivantes :
long lastmodified = file.lastModified();
long currentTime = new GregorianCalendar().getTimeInMillis();

Or, si je fais une tracage par :

log.println("Date dernière modification : " + lastmodified);
GregorianCalendar t = new GregorianCalendar();
t.setTimeInMillis(lastmodified);
log.println("Date modification en clair :
"+t.get(Calendar.DAY_OF_MONTH)+"/"+t.get(Calendar.MONTH)+"/"+t.get(Calendar.YEAR));
log.println("Date courante : " + currentTime);

Je constate qu'un fichier modifié le 16/07/2007 apparait modifié le
16/06/2007 ! J'ai une JRE 1.4.2. Sur mon PC en XP Pro, je n'ai aucune
décalage.

Ce problème ne se passe pas sur toutes les plateformes Windows. Mais j'ai
constaté un cas similaire sous Windows XP Pro il y a quelques temps, sans
avoir eu le temps de plus creuser.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Lionel
Le #229976
Marc Mendez wrote:
"+t.get(Calendar.DAY_OF_MONTH)+"/"+t.get(Calendar.MONTH)+"/"+t.get(Calendar.YEAR));
log.println("Date courante : " + currentTime);

Je constate qu'un fichier modifié le 16/07/2007 apparait modifié le
16/06/2007 ! J'ai une JRE 1.4.2. Sur mon PC en XP Pro, je n'ai aucune
décalage.


Extrait de la doc:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#MONTH

Field number for get and set indicating the month. This is a
calendar-specific value. The first month of the year is JANUARY which is 0;
the last depends on the number of months in a year.

Marc Mendez
Le #229975
STOP ! Je connais très bien ce cas, mais vous vous êtes trop vite précipité
sur la réponse !
Relisez bien ma question :
Le problème ne se passe pas sur TOUS les systèmes.

J'ai parlé également de 2007 : quand bien même (et je veux bien le croire)
je ne tienne pas compte de décalage de 1, pour une *même année*, quelque
soit le PC, le décalage devrait être le même. Or ce n'est pas le cas.

Lionel wrote:
Marc Mendez wrote:
"+t.get(Calendar.DAY_OF_MONTH)+"/"+t.get(Calendar.MONTH)+"/"+t.get(Calendar.YEAR));
log.println("Date courante : " + currentTime);

Je constate qu'un fichier modifié le 16/07/2007 apparait modifié le
16/06/2007 ! J'ai une JRE 1.4.2. Sur mon PC en XP Pro, je n'ai aucune
décalage.


Extrait de la doc:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#MONTH

Field number for get and set indicating the month. This is a
calendar-specific value. The first month of the year is JANUARY which
is 0; the last depends on the number of months in a year.



Real Gagnon
Le #229974
"Marc Mendez" news:46ca9f0d$0$420$:

log.println("Date modification en clair :
"+t.get(Calendar.DAY_OF_MONTH)+"/"+t.get(Calendar.MONTH)+"/"+t.get(Cale
ndar.YEAR));


C'est normal que le mois soit decale de 1 car t.get(Calendar.MONTH)
retourne 0 = janvier ... 11 = decembre donc pour afficher correctement il
faut ajouter 1 a la valeur retournee.

Bye.
--
Real Gagnon from Quebec, Canada
* Java, Javascript, VBScript and PowerBuilder code snippets
* http://www.rgagnon.com/howto.html
* http://www.rgagnon.com/bigindex.html

Marc Mendez
Le #229973
Je vous réponds donc la même chose qu'à Lionel !
;)
Real Gagnon wrote:
"Marc Mendez" news:46ca9f0d$0$420$:

log.println("Date modification en clair :
"+t.get(Calendar.DAY_OF_MONTH)+"/"+t.get(Calendar.MONTH)+"/"+t.get(Cale
ndar.YEAR));


C'est normal que le mois soit decale de 1 car t.get(Calendar.MONTH)
retourne 0 = janvier ... 11 = decembre donc pour afficher
correctement il faut ajouter 1 a la valeur retournee.

Bye.



TestMan
Le #229967
Bonjour,

Sous Win2003 server (X86), je constate un problème sur la récupération de la
date de modification d'un fichier. En effet, celle-ci est décalée d'un mois.
J'utilise les instructions suivantes :
long lastmodified = file.lastModified();
long currentTime = new GregorianCalendar().getTimeInMillis();

Or, si je fais une tracage par :

log.println("Date dernière modification : " + lastmodified);
GregorianCalendar t = new GregorianCalendar();
t.setTimeInMillis(lastmodified);
log.println("Date modification en clair :
"+t.get(Calendar.DAY_OF_MONTH)+"/"+t.get(Calendar.MONTH)+"/"+t.get(Calendar.YEAR));
log.println("Date courante : " + currentTime);

Je constate qu'un fichier modifié le 16/07/2007 apparait modifié le
16/06/2007 ! J'ai une JRE 1.4.2. Sur mon PC en XP Pro, je n'ai aucune
décalage.

Ce problème ne se passe pas sur toutes les plateformes Windows. Mais j'ai
constaté un cas similaire sous Windows XP Pro il y a quelques temps, sans
avoir eu le temps de plus creuser.

Bonjour,


Aucun problème à ma connaissance en ce sens ...

Par contre si le but votre but est d'effectuer un horodatage calendaire,
je vous confirme (comme indiqué par Lionel et Real) que votre code
produira un horrodatage 100% du temps décalé quelque soit la plateforme,
sa version ainsi que l'âge du capitaine (cf. la doc correspondante au
champ MONTH).

Pour produire l'effet escomptez, utilisez simplement :

new SimpleDateFormat("dd/MM/yyyy").format(monObjetDate)

Testez avec ce code là, et si votre constatation se reproduit, merci de
poster avec toutes les informations usuelles et adequat ;-)

A+
TM

Publicité
Poster une réponse
Anonyme