- PR -

GMT時間とJST-9時間について

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/02/08
投稿数: 9
投稿日時: 2005-02-08 14:53
はじめまして。
Java2SE1.4.2 & Win2KSP4でコーディングしています。
当方Javaを始めたばかりでノウハウがなく、ご教授お願いします。

GMT時間で定義されている"031201030030Z"という文字列があった場合
(2003年12月1日3時0分30秒)、この時間をJST-9時間に変換する場合どのように
すればよいのでしょうか?

int型変数nYear,nMonth,nDay,nHour,nMin,nSecにそれぞれ上記文字列から
データを切り出して、

 Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
 cal.clear();
 cal.set(nYear, (nMonth - 1), nDay, nHour, nMin, nSec);

としてCalendarクラスオブジェクトを構築します。
この後

 Date da = cal.getDate();

としてDateクラスオブジェクトを構築してDateクラスのgetHours()などの
メソッドを呼び出せば自動的にJST-9の時間を取り出せると思ったのですが、
getHours()は推奨されていないメソッドのようなので、

int nYear2 = cal.get(Calendar.YEAR);

にて日付の各要素を取り出そうと思いました。
が、これだと取り出される値は内部プロパティ値であり、"GMT"のままです。
そこで、

cal.add(Calendar.HOUR, 9); // JPT-9なので9時間進める

を実行して無理やり9時間進めてみると上手くいくのですが、
このようにGMTからJST-9の時間を取り出す場合、普通どのようにするものでしょうか?
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-02-08 15:32
こんなんでどうでしょう。
コード:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
System.out.println("GMT Hour : " + cal.get(Calendar.HOUR));
TimeZone timezone = TimeZone.getTimeZone("Asia/Tokyo");
//こっちでもいいですか?
//TimeZone timezone = TimeZone.getDefault();
cal.setTimeZone(timezone);
System.out.println("Tokyo Hour : " + cal.get(Calendar.HOUR));

さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2005-02-08 16:02
こんにちは、さくらばです。

DateFormat を使うのがいいと思います。Date/Calendar が作れれば
後は Edosson さんが仰られるように、TimeZoneを切り替えればいい
だけですから。

こんな感じです。

コード:
        SimpleDateFormat format = new SimpleDateFormat("yyMMddHHmmss");
        format.setTimeZone(TimeZone.getTimeZone("GMT")); 
        ParsePosition position = new ParsePosition(0);
        Date date = format.parse("031201030030Z");

        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
        cal.setTime(date);
        System.out.printf("%tc%n", cal);
        cal.setTimeZone(TimeZone.getTimeZone("JST")); 
        System.out.printf("%tc%n", cal);


未記入
会議室デビュー日: 2005/02/08
投稿数: 9
投稿日時: 2005-02-08 16:04
Edossonさん、返答ありがとうございます。

ご教授いただいた通り、TimeZoneを"Asia/Tokyo"に変更して
実行してみますと、確かにGMT→JST-9に変換されました。
自分でcal.set()した時間でも問題ありませんでした。

しかし、上記をDOS上で実行した場合問題は起きないのですが、
申し送れましたが、Eclipse3.0上で開発しており、Eclipse上だと
GMTに対して+9時間が上手く働く時と働かない時があります。
この原因がわかりません。
未記入
会議室デビュー日: 2005/02/08
投稿数: 9
投稿日時: 2005-02-08 16:24
さくらばさん、返答ありがとうございます。
ご教授いただいた方法で上手く動作します。

任意の時間を指定したCalendarオブジェクトを作成する際は、
cal.set()では上手くいかないケースがありうるのでしょうか。。
(当方のコーディングミスという可能性もありますが)

今回はさくらばさんに教えていただいた方法でCalendarオブジェクトを
構築し、御二人に教えていただいたとおりTimeZoneを切り替えて対応します。

ありがとうございました。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-02-08 16:30
考えられることといえば、TimeZoneを変更しているわけですから、
set()でパラメータを変更する場合、TimeZoneに応じた値を与えなければなりません。
GMTで生成したCalendarインスタンスのTimeZoneを東京に変更したからといって、
GMTの時刻を与えたら、東京の時刻に変更してくれる訳じゃないです。
ってところでしょうか。

引用:

しかし、上記をDOS上で実行した場合問題は起きないのですが、
申し送れましたが、Eclipse3.0上で開発しており、Eclipse上だと
GMTに対して+9時間が上手く働く時と働かない時があります。



両者がまったく同一である、と断言するのは、注意が必要ですよ。
考慮の上であれば、ご容赦ください。
未記入
会議室デビュー日: 2005/02/08
投稿数: 9
投稿日時: 2005-02-08 17:19
Edossonさん、解説ありがとうございます。
どうも私は根本的に理解不十分でした。。

>両者がまったく同一である、と断言するのは、注意が必要ですよ。
>考慮の上であれば、ご容赦ください。
いえ、まったく考慮できていませんでした。。お恥ずかしい限りです。

勉強になりました。ありがとうございます。
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2005-02-08 18:20
こんにちは、さくらばです。

引用:

未記入さんの書き込み (2005-02-08 16:24) より:
任意の時間を指定したCalendarオブジェクトを作成する際は、
cal.set()では上手くいかないケースがありうるのでしょうか。。
(当方のコーディングミスという可能性もありますが)



単に面倒くさいからという理由です...

記述量が多くなれば、それだけミスが起こりやすいですし、
すでにライブラリで同様の機能が提供されているのであれば
それを使ったほうが手っ取り早いですから。
1

スキルアップ/キャリアアップ(JOB@IT)