プロが教える店舗&オフィスのセキュリティ対策術

CLDC(携帯向けJava)での日付計算がうまくいきません。

JavaのSEでは、Calender.addなる日付計算関数があるようですが、
CLDC(携帯向けJava)では使えないみたいなので、以下の実験コードを
書いてみました。しかし、意図する結果が得られませんでした。

このケースでのよい計算方法をご存知でしたらご教授
頂ければうれしく思います。または、
以下のプログラムのバグ、ポカアホミス、作法的要修正点、
日付計算仕様的な可能/不可能等お気づきありましたら、
ご指摘頂ければ嬉しいです。

尚、意図した結果とは、下記の★部分において、
1970年1月1日(?曜日) 0:1:0 です。
グリニッジ標準時 1970 年 1 月 1 日 0:00:00 (エポック) からの
経過時間が、60000ミリ秒(60秒) というのを期待しました。


--以下コード--

void print_cal(Calendar cal){
String WEEK=" 日月火水木金土";
int year =cal.get(Calendar.YEAR);
int month =cal.get(Calendar.MONTH)+1;
int day_of_month=cal.get(Calendar.DAY_OF_MONTH);
int day_of_week =cal.get(Calendar.DAY_OF_WEEK);
int hour =cal.get(Calendar.HOUR_OF_DAY);
int minute =cal.get(Calendar.MINUTE);
int second =cal.get(Calendar.SECOND);
System.out.println("" + year + "/" + month + "/" + day_of_month + "(" + WEEK.charAt(day_of_week) + ") " + hour + ":" + minute + ":" + second);
}

Calendar cal = Calendar.getInstance();
long now = cal.getTime().getTime();
print_cal(cal);

cal.set(Calendar.YEAR, 2007);
cal.set(Calendar.MONTH, Calendar.MAY);
cal.set(Calendar.DAY_OF_MONTH, 31);
cal.set(Calendar.HOUR_OF_DAY, 6);
cal.set(Calendar.MINUTE, 12);
cal.set(Calendar.SECOND, 44);
print_cal(cal); //<---- 2007/5/31(木) 6:12:44

long time1 = cal.getTime().getTime();

cal.set(Calendar.YEAR, 2007);
cal.set(Calendar.MONTH, Calendar.MAY);
cal.set(Calendar.DAY_OF_MONTH, 31);
cal.set(Calendar.HOUR_OF_DAY, 6);
cal.set(Calendar.MINUTE, 13);
cal.set(Calendar.SECOND, 44);
long time2 = cal.getTime().getTime();
print_cal(cal); //<------ 2007/5/31(木) 6:13:44

long sabun = time2 - time1; //<---- 60000
Date hoge = new Date(sabun);
long hoge_time = hoge.getTime();
System.out.println(hoge_time); <--- 60000

//setTime: Calendar の現在の時刻を、指定された Date に。
cal.setTime(hoge);

//★この時点でprint_cal。
print_cal(cal); <---- 1970/1/1(木) 9:1:0 ?9時間も経ってる?
long now2 = cal.getTime().getTime();
System.out.println("now2: " + now2); <--- 60000。でも60秒がはいってるぽい

--コード以上--

A 回答 (1件)

日付を日本標準時で表示するので+9時間されます。


CalendarのタイムゾーンにGMTをセットすればとりあえず意図した表示を得ることはできます。

端末からの入力も含め、外部と時刻情報のやり取りをするときは、タイムゾーンに注意してください。
    • good
    • 0
この回答へのお礼

isle様

ご指摘誠にありがとうございました。
その通りで、差分割り当て用Calendarオブジェクトを次で取得した所、

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

正常に計算結果を求めることができている模様です。
不具合の原因は私のコードにありました。
お手間を頂き、とても役に立つご助言、誠にありがとうございました。
心より、御礼申し上げます。

お礼日時:2007/05/31 20:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!