Question

J'ai écrit ce code Java suivant pour formater la date et l'heure dans des formats spécifiques. Vous pouvez voir le dessous du code ideone .

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
class timeAndDateTransformation{
    public static void main(String[] argv){
            Calendar newDate = new GregorianCalendar(2009,7,1,15,20,00);
            SimpleDateFormat dateFormant = new SimpleDateFormat("yyyy/MM/dd");
            SimpleDateFormat timeFormant = new SimpleDateFormat("HH:mm:ss");
            System.out.println(dateFormant.format(newDate.getTime()).toString());
            System.out.println(timeFormant.format(newDate.getTime()).toString());
    }

}

Sa me donne la sortie suivante:

2009/08/01
15:20:00

Dans cette sortie de repos tout parfaitement bien, à l'exception du mois. J'ai passé 7 un mois mais dans ce pour-matière sortie son donnant 8 comme une sortie. S'il vous plaît me point que je fais mal. Je ne suis pas très familier avec les classes de date / calendrier de java, donc faire preuve de patience.

Était-ce utile?

La solution

Les mois sont basés sur 0, vous avez passé à 7 afin que décide d'Août.

Des docs pour api java.util.Date:

  

Un mois est représenté par un entier de 0 à 11; 0 est Janvier, 1 est Février, et ainsi de suite; ainsi 11 est Décembre.

Il est vraiment contre-intuitif pour faire fonction zéro du mois. Je pense que nous avons tous obtenu incendiés par celui-là à un moment donné.

Autres conseils

Le champ de mois en Java est basé sur zéro. GregorianCalendar.JANUARY est 0 ... etc, etc. Par conséquent, si vous voulez passer à une date dans le constructeur, ajouter un à la valeur du mois.

Si vous regardez le [JavaDoc ici] [1], ce pour vous explique.

[1]: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#set(int , int, int)

Les humains aiment voir le premier mois (Janvier) étant 1, de sorte que est ce que SimpleDateFormat fait.

Cependant les ordinateurs aiment voir les choses à partir de 0, et que de la façon dont GregorianCalendar gère les month param. Voir les constructeurs pour GregorianCalendar et Description du paramètre month.

[Java considère mois Janvier 0.] [1] Mais lorsque vous sortie le nombre de mois avec SimpleDateFormat il utilise la norme Janvier est le système 1 mois. Donc, mois 7 est comme 8 émis.

Si vous rencontrez des problèmes avec la date et le calendrier du JDK en utilisant Joda temps , il est beaucoup plus facile

[1]: http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html#GregorianCalendar(int , int, int)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top