日数追加計算について

721 views
Skip to first unread message

furusin

unread,
Apr 24, 2011, 5:19:52 AM4/24/11
to 日本androidの会
毎度毎度お世話になります。古川@furusin_oriverです。

現在、任意の日付に指定の日数を追加し、追加後の日付を表示するアプリを作っています。
(◯年◎月□日の△日後は ●年◆月■日です。みたいな感じ)
日付の入力方法はDatePickerでやっています。

ですが、その追加後の日付がどうもずれてしまいます。
色々と試してみたところ、2,4,6,9,11月以外も、月末は30日までで計算されているようです。(もしかしたら違うかも)
現在の計算プログラムの概要です
***********************
//DatePickerから日付取得
year = datePicker.getYear();
month = datePicker.getMonth() + 1;
day = datePicker.getDayOfMonth();
int ExtendDay = 48;

//Calendarにセット
Calendar cal = Calendar.getInstance();
cal.set(year, month, day, 0, 0, 0);

//指定日数追加
cal.add(Calendar.DAY_OF_YEAR, ExtendDay);

//表示
String result = cal.get(Calendar.YEAR) + "年" + cal.get(Calendar.MONTH) + "月" + cal.get(Calendar.DATE);
textView.setText(result);
***********************

試しに2011年5月24日でやってみたら、48日後の7月11日が正常に表示されました。
ですが、それを6月24日にすると、8月10日になって、1日手前にズレます。(8月11日になってほしいのです)
また、7月24日でやると、今度は9月11日になって、1日後ろにズレます。(9月10日がほしい)
8月24日でやると、これは正常に10月11日と表示されました。

あと、年をまたぐ場合(例;2011年10月24日から48日後)
2011年10月24日でやってみると、結果が2012年0月11日にとなってしまいます。
このゼロになってしまうのは、どのように対策をとったらよろしいのでしょうか?

頭が混乱し始めたので、質問したほうがいいと思ってMLに飛ばしました。
よろしくお願い致します。

夜子まま

unread,
Apr 24, 2011, 6:09:23 AM4/24/11
to android-g...@googlegroups.com
夜子ままです

Calendarで取得されるMonthは0で始まる月なので例えば6月の場合は数字の5
が返ってきます。
だから表示する場合は+1するのが基本です。

下のプログラムをみるとそのようにしているようですが、気になるのは
Setするところ、ここで+1されたMonthを設定しているようにみえます。
こうすると、6月で設定しているつもりが7月に設定されてしまうので、その状
態でDay_Of_Yearで日付を設定なんかしちゃうと30日の月や31日の月などで
違う日数が追加されてしまうでしょう。
そのへんで勘違いが生じているのではないのかなとおもいますが、どうでしょうか?
一度整理してみるとよいです。
また、このような不具合をなくすためにはCalendarへのアクセスをクラスに
閉じ込めてしまってセットとゲットで自動的に+1、-1をしてくれるように
すると混乱しないとおもいます。(そのうち、慣れてくるかもしれませんが)


(11/04/24 18:19), furusin wrote:
> 毎度毎度お世話になります。古川@furusin_oriverです。
>
> 現在、任意の日付に指定の日数を追加し、追加後の日付を表示するアプリを作っ

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送ら
> れています。
> このグループに投稿するには、android-g...@googlegroups.com にメー
> ルを送信してください。
> このグループから退会するには、android-group-
> japan+un...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。

SHINJI FURUKAWA

unread,
Apr 24, 2011, 6:21:07 AM4/24/11
to android-g...@googlegroups.com
古川@furusin_oriverです

夜子ままさんありがとうございます!!
修正したら出来ました!!
Monthを+1してからCalendarにsetするのではなく、setしてから、
各出力の時に+1したら正常に動作しました!

最終的にはこうなりました
***********************
//DatePickerから日付取得
year = datePicker.getYear();
//変更部分(+1を消した)
month = datePicker.getMonth();
day = datePicker.getDayOfMonth();
int ExtendDay = 48;

//Calendarにセット
Calendar cal = Calendar.getInstance();
cal.set(year, month, day, 0, 0, 0);

//指定日数追加
cal.add(Calendar.DAY_OF_YEAR, ExtendDay);

//表示(MONTHに+1を追記)
String result = cal.get(Calendar.YEAR) + "年" + (cal.get(Calendar.MONTH) + 1) + "月" + cal.get(Calendar.DATE);
textView.setText(result);
***********************

なんで気付かなかったんだろう…
昨日の3時間が5分で解決しました笑
ありがとうございました!


2011年4月24日19:09 夜子まま <hijirin...@gmail.com>:
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


Reply all
Reply to author
Forward
0 new messages