Java.util.Calendrier - le nombre de millisecondes depuis le 1er janvier 1970
Programme suivi par la sortie. Quelqu'un s'il vous plaît expliquez-moi pourquoi 10 000 000 de millisecondes depuis le 1er janvier 1970 à novembre 31, 1969. Eh bien, s'il vous plaît expliquer quel est le problème avec mon hypothèse que le premier test doit produire un temps de 10 000 000 millisecondes depuis le 1er janvier 1970. Le nombre est inférieur à 10 000 000 de produire le même résultat.
public static void main(String[] args) {
String x = "10000000";
long l = new Long(x).longValue();
System.out.println("Long value: " + l);
Calendar c = new GregorianCalendar();
c.setTimeInMillis(l);
System.out.println("Calendar time in Millis: " + c.getTimeInMillis());
String origDate = c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH) + "-" + c.get(Calendar.DAY_OF_MONTH);
System.out.println("Date in YYYY-MM-DD format: " + origDate);
x = "1000000000000";
l = new Long(x).longValue();
System.out.println("\nLong value: " + l);
c.setTimeInMillis(l);
System.out.println("Calendar time in Millis: " + c.getTimeInMillis());
origDate = c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH) + "-" + c.get(Calendar.DAY_OF_MONTH);
System.out.println("Date in YYYY-MM-DD format: " + origDate);
}
Valeur de type Long: 10000000
Calendrier de temps en Millis: 10000000
Date au format AAAA-MM-JJ: 1969-11-31
Valeur de type Long: e 1000000000000
Calendrier de temps en Millis: e 1000000000000
Date au format AAAA-MM-JJ: 2001-8-8
OriginalL'auteur Nathan Spears | 2008-11-04
Vous devez vous connecter pour publier un commentaire.
Les dates que vous imprimez à partir de
Calendar
locaux pour votre fuseau horaire, alors que l'époque est définie à minuit en UTC 1970-01-01. Donc, si vous vivre dans un fuseau horaire à l'ouest de l'UTC, puis votre date de montrer que 1969-12-31, même si (en UTC) il est encore 1970-01-01.OriginalL'auteur Chris Jester-Young
Première, c.get(Calendar.MOIS) renvoie 0 pour Jan, 1 pour la Feb, etc.
Deuxièmement, l'utilisation DateFormat à des dates de sortie.
Troisième, vos problèmes sont un excellent exemple de la façon maladroite de Java Date de l'API. Utilisation Joda de l'API du Temps si vous le pouvez. Il fera de votre vie un peu plus facile.
Voici un meilleur exemple de votre code, ce qui indique le fuseau horaire:
OriginalL'auteur Steve McLeod
Calendrier#setTimeInMillis() définit le calendrier est temps pour le nombre de millisecondes après le 1 janvier 1970 GMT.
Calendrier#get() retourne le champ requise ajusté pour le calendrier du fuseau horaire qui, par défaut, est votre machine locale du fuseau horaire.
Cela devrait fonctionner comme prévu si vous spécifiez "GMT" fuseau horaire lorsque vous construisez le calendrier:
OriginalL'auteur Mike
Malheureusement,
java.util.Date
etjava.util.Calendar
ont été mal conçus qui conduit à ce genre de confusion.OriginalL'auteur Julien Chastang
Votre fuseau horaire est le plus susceptible à la traîne GMT (par exemple, GMT-5), donc 10 000 000 de ms de l'époque est le 31 décembre 1969 dans votre fuseau horaire, mais depuis des mois sont basés sur zéro en java.util.Calendrier votre Calendrier->texte de conversion est défectueux et vous obtenez 1969-11-31 à la place de l'1969-12-31.
OriginalL'auteur Alexander
Vous pouvez déterminer vous-même si vous modifiez votre premier
c.setTimeInMillis(l);
dansc.clear();
OriginalL'auteur Davide