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秒がはいってるぽい
--コード以上--
No.1ベストアンサー
- 回答日時:
日付を日本標準時で表示するので+9時間されます。
CalendarのタイムゾーンにGMTをセットすればとりあえず意図した表示を得ることはできます。
端末からの入力も含め、外部と時刻情報のやり取りをするときは、タイムゾーンに注意してください。
isle様
ご指摘誠にありがとうございました。
その通りで、差分割り当て用Calendarオブジェクトを次で取得した所、
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
正常に計算結果を求めることができている模様です。
不具合の原因は私のコードにありました。
お手間を頂き、とても役に立つご助言、誠にありがとうございました。
心より、御礼申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サーバー Windows2019CALとRDS CALについて 1 2022/06/19 13:48
- サーバー Windows Server 2019 CALについて 3 2022/04/02 16:40
- 食べ物・食材 カロリー表示 kcal と cal について 4 2023/02/06 18:42
- 高校 水1(kg)を撹拌棒でかき混ぜた。水がされた仕事の大きさが1500(J)だとすると、水温は何度上昇す 1 2022/11/30 14:17
- 物理学 生体力学の問題です 体重が50[kg]、 基礎代謝量 1200[kcal]の女性の代謝率は何[W]か 2 2023/02/05 18:53
- Windows 10 WindowsserverとCALの事について 2 2022/06/15 11:37
- Visual Basic(VBA) swiftで年号を 1 2023/02/05 06:48
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- 英語 "this day"が当日か今日を表すのかの使い分け方等について 5 2023/08/08 14:29
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
論理演算子”||”またはの入力方法
-
*を表示させるプログラムを
-
数値⇒漢数字変換 java
-
Randomメソッドの確率設定
-
java 配列
-
Java、2の0乗~10乗の表示
-
画面出力の際の繰り返しと入力...
-
JSPのwhile文で1~5の☆でひし形...
-
java 拡張for map
-
繰り返しによる星印の出力
-
要素数が10の配列で、乱数0~9...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
乱数の生成について
-
Loop後に変数が出力できないです
-
for文を使った累乗の計算方法に...
-
テキストボックスに入力された...
-
java プログラム for 文 while ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
コマンドライン引数の例外処理...
-
JAVAのfor文で困っています。
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
Randomメソッドの確率設定
-
Ctrl+Zが入力されると終了する...
-
学校で課題を出されて困ってい...
-
Java キーボードから負の数が入...
-
キーボードから10人分の点数を...
-
階乗の式
-
Java 配列<選挙>
おすすめ情報