Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

5 réponses
Avatar
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.

5 réponses

Avatar
Lionel
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.

Avatar
Marc Mendez
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.



Avatar
Real Gagnon
"Marc Mendez" wrote in
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

Avatar
Marc Mendez
Je vous réponds donc la même chose qu'à Lionel !
;)
Real Gagnon wrote:
"Marc Mendez" wrote in
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.



Avatar
TestMan
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