- アマ
- 会議室デビュー日: 2004/08/17
- 投稿数: 12
- お住まい・勤務地: コンクリートジャングル
|
投稿日時: 2005-05-27 20:32
日付を引き算していると気になることがありました。
4月30日からループで1日ずつ引いていくと、
3月31日が登場しません。
これはどういうことなのでしょうか?
誰か教えてください。
宜しくお願いいたします。
コード: |
|
import java.util.GregorianCalendar;
public class Test {
public static void main(String[] args) {
//これが基準日
String toYYYYMMDD = "20050430";
//30日前の取得
GregorianCalendar cl30 = new GregorianCalendar();
cl30.set(
Integer.parseInt(toYYYYMMDD.substring(0,4)),
Integer.parseInt(toYYYYMMDD.substring(4,6)),
Integer.parseInt(toYYYYMMDD.substring(6,8)));
//だらだらと出してみる
for (int i = 0; i <= 31; i++) {
cl30.add(GregorianCalendar.DATE, -1);
String testDay =
cl30.get(GregorianCalendar.YEAR) + "/" +
cl30.get(GregorianCalendar.MONTH) + "/" +
cl30.get(GregorianCalendar.DATE);
System.out.println("-*-*-*-*-*-*-*-*-*-*");
System.out.println(i + ":" + testDay);
System.out.println("-*-*-*-*-*-*-*-*-*-*");
}
}
}
|
結果の一部です。
・・・
-*-*-*-*-*-*-*-*-*-*
27:2005/4/2
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
28:2005/4/1
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
29:2005/3/30
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
30:2005/3/29
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
31:2005/3/28
-*-*-*-*-*-*-*-*-*-*
|
- ykhr
- 会議室デビュー日: 2004/11/12
- 投稿数: 18
|
投稿日時: 2005-05-27 21:05
答えは、ここらへんでしょうか・・・
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Calendar.html#MONTH
|
- アマ
- 会議室デビュー日: 2004/08/17
- 投稿数: 12
- お住まい・勤務地: コンクリートジャングル
|
投稿日時: 2005-05-28 15:28
すみません。
理解できませんでした。
教えていただけないでしょうか。
|
- かつのり
- ぬし
- 会議室デビュー日: 2004/03/18
- 投稿数: 2015
- お住まい・勤務地: 札幌
|
投稿日時: 2005-05-28 15:49
つまり、
引用: |
|
-*-*-*-*-*-*-*-*-*-*
27:2005/4/2
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
28:2005/4/1
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
29:2005/3/30
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
30:2005/3/29
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
31:2005/3/28
-*-*-*-*-*-*-*-*-*-*
|
と表示されていますが、Javaのカレンダークラスでは、
月は0から始まりますので、
コード: |
|
-*-*-*-*-*-*-*-*-*-*
27:2005/5/2
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
28:2005/5/1
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
29:2005/4/30
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
30:2005/4/29
-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*
31:2005/4/28
-*-*-*-*-*-*-*-*-*-*
|
というような出力が実際の日付です。
ですので[4/31]がないので、あなたのプログラム上では
[3/31]が表示されないのです。
|
- にしざき
- ぬし
- 会議室デビュー日: 2003/06/30
- 投稿数: 304
|
投稿日時: 2005-05-28 15:50
じゃ、
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Calendar.html#set(int,%20int,%20int)
これ?
|
- にしざき
- ぬし
- 会議室デビュー日: 2003/06/30
- 投稿数: 304
|
投稿日時: 2005-05-28 15:54
先を越された。
言い換えると、
set(2005, 4, 30)
は、
set(2005, Calendar.MAY, 30)
だということです。
|
- アマ
- 会議室デビュー日: 2004/08/17
- 投稿数: 12
- お住まい・勤務地: コンクリートジャングル
|
投稿日時: 2005-05-28 16:03
なるほど!!!
日は1から始まるけど、月は0から始まるから、
そこでずれてたってことですね!!!!
おかげ様で思い通りに出来ました!!!!!
ありがとうございました!!!!!!
|