2010-11-28 7 views
1

Je suis essayer d'obtenir la date/heure actuelle au format suivant,Java problème manipulation date Calander

SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); 
// should display something similar to 2001.07.04 AD at 12:08:56 PDT 
Calendar calendar = Calendar.getInstance(); 
calendar.set(2009, 2, 4, 10, 22, 44); 
format.format(calendar.getTime()); 
System.out.println(calendar.getTime()); 

Mais comme afficher Mer 4 mars 10:22:44 IST 2009.

Le La deuxième question est que je veux voir la valeur en millisecondes du temps fixé.

System.out.println(calendar.getTimeInMillis()); 

Mais elle renvoie toujours la valeur du millisecondes en cours et non le temps que j'ai défini.

Que manque-t-il ici s'il vous plait?

+0

Les mois commencent par 0, donc 2 est mars. Legacy API être damné! – Thilo

+0

http://stackoverflow.com/questions/344380/why-is-january-month-0-in-java-calendar – Thilo

Répondre

2

La méthode SimpleDateFormat#format(Object) renvoie un String mis en forme, il n'affecte pas comment la méthode Calendar#getTime() renvoie. À cette fin, vous devriez faire:

System.out.println(format.format(calendar.getTime())); 
1

Le premier problème que je vois est que format.format(calendar.getTime()); retourne une chaîne et ne modifie pas la mise en forme du calendrier. Vous allez vouloir remplacer les deux dernières lignes par System.out.println(format.format(calendar.getTime())); pour imprimer réellement la date en utilisant le format que vous spécifiez (en supposant que votre SimpleDateFormat est valide, mais cela semble OK en un coup d'œil).

Je ne suis pas sûr du second problème que vous avez, malheureusement, mais j'ai une place pour commencer. Je ne suis pas un fan de la formulation des Javadocs pour getTime() et getTimeInMillis(). La méthode getTime() renvoie «un objet Date représentant la valeur de temps de Calendar» tandis que getTimeInMillis() renvoie «l'heure actuelle en tant que millisecondes UTC de l'époque». Pour moi, la différence de formulation implique que getTimeInMillis() n'utilise pas la date spécifiée par l'objet Calendar, même s'il s'agit d'une méthode d'instance. Essayez pour appeler la méthode getTime() sur la représentation Date du calendrier, qui est document pour renvoyer l'heure en millisecondes entre le 1er janvier 1970 et la date représentée par l'objet Date.

+0

Merci Thomas..et même j'utilise calendar.getTime(). GetTime() il renvoie diferent long valeurs quand jamais je cours le code ... ne devrait pas seulement afficher une valeur statique représentant la date que je mets ealier – Harshana

1

Pour la deuxième partie de votre question, vous devez appeler Calendar.get(Calendar.MILLISECONDS) pour récupérer le champ millisecondes d'un objet de calendrier.

+0

Je ne pense pas que ce soit ce qu'il veut ... je crois comprendre que cela renvoie le nombre de millisecondes dans le donné temps. "Numéro de champ pour obtenir et définir indiquant la milliseconde dans la seconde, par exemple, à 10: 04: 15.250 PM le MILLISECOND est 250." –

+0

@ Thomas Owens - ma compréhension de la question est que c'est exactement ce qu'il demande. –

+0

Peut-être. Mais la méthode getTimeInMillis() obtient le temps en millisecondes en fonction de l'époque, et non de la valeur en millisecondes de l'objet Calendar. –