2

日付と時刻を特定の形式でフォーマットするために、次のJavaコードを作成しました。以下のコードは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());
    }

}

それは私に次の出力を与えます:

2009/08/01
15:20:00

この出力では、月を除いてすべて問題ありません。私は月として7を通過しましたが、この問題の出力では、出力として8を与えます。どこが間違っているのか教えてください。私はJavaの日付/カレンダークラスにあまり精通していないので、我慢してください。

4

4 に答える 4

7

月は0から始まり、7を過ぎたため、8月に解決されます。

java.util.DateのAPIドキュメントから:

月は0から11までの整数で表されます。0は1月、1は2月などです。したがって、11は12月です。

月をゼロベースにするのは本当に直感に反します。ある時点で、私たちは皆、その人に火傷を負ったと思います。

于 2010-10-21T17:17:30.190 に答える
2

Javaの月フィールドはゼロベースです。GregorianCalendar.JANUARYは0...などです。したがって、コンストラクターに日付を渡したい場合は、月の値に1を追加します。

[JavaDoc here] [1]を見ると、それが説明されています。

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

于 2010-10-21T17:17:50.110 に答える
2

人間は最初の月(1月)が1であるのを見たいので、そうSimpleDateFormatします。

ただし、コンピューターは0から始まるものを見るのが好きで、それがパラメーターのGregorianCalendar管理方法monthです。GregorianCalendarのコンストラクターとパラメーターの説明を参照してmonthください。

于 2010-10-21T17:18:19.330 に答える
1

[Javaは1月の月0を考慮します。][1]ただし、SimpleDateFormatを使用して月番号を出力する場合、標準の1月は月1のシステムを使用します。したがって、7か月目は8として出力されます。

JDKの日付とカレンダーに問題がある場合は、JodaTimeの使用を検討してください

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

于 2010-10-21T17:18:35.223 に答える