2009-08-04 10 views
4

Je définis la date de modification d'un fichier créé en Java sur un nombre spécifique. Quand je lis cette valeur sur Windows, j'obtiens la même valeur. Cependant, sur Linux (Ubuntu), j'ai une valeur différente. La valeur pour File.lastModified() est désactivée par 9 heures, mais quand je regarde les propriétés d'un fichier, je vois qu'il est éteint par une heure seulement. Je m'attends à la même valeur à tous les niveaux.Date de modification du fichier en Java

Ai-je tort de dépendre de cette compatibilité et cohérence? Le javadoc est assez clair sur la signification de la méthode et ne mentionne pas les incompatibilités potentielles.

Répondre

3

Il est presque certainement un problème de fuseau horaire. La méthode Java utilise/attend GMT, l'OS affichera l'heure locale, ce qui explique la différence. Maintenant, la vraie question est: comment est l'heure stockée dans le système de fichiers?

Quel système de fichiers utilisez-vous? Probablement FAT32 - qui stocke les horodatages dans l'heure locale, ce qui rend difficile la cohérence entre les systèmes d'exploitation. Je ne sais pas exactement où les choses vont mal, mais il peut s'agir d'un problème de configuration du système d'exploitation ou d'un bogue de la JVM - quelle JVM utilisez-vous sous Linux?

+0

Le fichier est sur une clé USB, donc je ne sais pas quel système de fichiers s'applique. Mais la chose du fuseau horaire a un sens. –

+1

Les clés USB utilisent presque toujours FAT32. –

0

avez-vous vérifié la valeur de retour de setLastModified?

Retours:

true if and only if the operation succeeded; false otherwise 
+0

La date est significativement différente, donc quelque chose a certainement changé. –

0

Je pense que c'est un problème de fuseau horaire. Notez que le javadoc indique "millisecondes depuis l'époque (00:00:00 GMT, 1er janvier 1970)" (soulignement ajouté). Est-il possible que la valeur que vous avez transmise à setModified soit en millisecondes depuis l'époque, heure locale? Si tel est le cas, vous serez à une heure de l'heure locale puisque l'heure locale en Belgique est GMT + 1. Cela expliquerait l'heure dans la boîte de dialogue des propriétés.

Je n'arrive pas à expliquer la différence de 9 heures avec lastModified(), sauf si java ou l'os met en cache une ancienne valeur d'une façon ou d'une autre.

+0

La chose du fuseau horaire a du sens. Je vais regarder dans ça. –

Questions connexes