java.util.Calendar

目的
世界の日付と時刻を表示する

関連クラス

今回のソース
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import java.util.TimeZone;

class CalendarDemo
{
	public static void main(String args[])
	{
		new MainWindow();
	}
}

class MainWindow extends Frame
{
	// タイムゾーンの名前のリスト
	String time_zone_list[];

	// 表示部
	Label date_time;

	public MainWindow()
	{
		super("World Time");

		// ウインドウリスナの追加
		WindowListener listener = new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		};
		addWindowListener(listener);

		// タイムゾーンリストの取得
		time_zone_list = TimeZone.getAvailableIDs();

		// 表示部のラベルの定義
		date_time = new Label("",Label.CENTER);
		date_time.setFont(new Font("",Font.PLAIN,15));

		// リストの定義
		List list = new List();
		for(int i=0;i<time_zone_list.length;i++)
		{
			list.add(time_zone_list[i]);
		}

		// リストへのアイテムリスナの追加
		ItemListener listener_list = new ItemListener()
		{
			public void itemStateChanged(ItemEvent e)
			{
				// 選択されたタイムゾーンを元に、カレンダーオブジェクトの構築
				int index = ((Integer)e.getItem()).intValue();
				String timezone = time_zone_list[index];
				Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(timezone));

				// 各値の取得
				int month = calendar.get(Calendar.MONTH);
				int date = calendar.get(Calendar.DATE);
				int week = calendar.get(Calendar.DAY_OF_WEEK);
				int hour = calendar.get(Calendar.HOUR_OF_DAY);
				int minute = calendar.get(Calendar.MINUTE);

				// 表示部へセット
				String time = month + "/" + date + "(" + getWeekName(week) + ") " + hour + ":" + minute;
				date_time.setText(time);
			}
		};
		list.addItemListener(listener_list);

		// コンポーネントをフレームに追加する
		add(list,BorderLayout.CENTER);
		add(date_time,BorderLayout.SOUTH);

		// ウインドウの表示
		setSize(255,255);
		setVisible(true);
	}

	protected String getWeekName(int week_number)
	{
		// 1(日曜日)〜7(土曜日)
		final String week_name[] = {"","Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

		return(week_name[week_number]);
	}
}
Source is here. (ZIP Format,1151Byte,Shift-JIS)

コンパイル&実行
javac CalendarDemo.java
java CalendarDemo

説明
(概略)

Java2新機能のInternationalization(国際化:i18n)の辺を読んでいて、
なんとなく作りたくなったプログラムです(^^;
こっちが深夜でも、アメリカは午前中だったりして、
結構面白いものがあります。
ぜひ、実行してみて下さい。

(サンプルプログラムの説明)

time_zone_list = TimeZone.getAvailableIDs();
Java2では、362のタイムゾーンが設定されているようです。
もちろん、日本のJST(兵庫県明石市だっけ?)や、標準時刻のGMTも含まれています。
所在地のタイムゾーンIDを得るには、
TimeZone.getDefault()で、TimeZoneオブジェクトを得てから、
getID()メソッドを使います。
int index = ((Integer)e.getItem()).intValue();
なんだかややこしいコードになってます。
ItemEvent.getItemメソッドは、Object型を返すようになっているのですが、
toStringを取ってみると、結局は1,2,...,nのような整数になっています。
なんで、int型が返り値では無いんでしょうね?
SwingのJListなら、Listに格納出来るのが、文字列だけでは無いので、
そういう仕様も納得出来るのですが。
final String week_name[] = {"","Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
なぜか、Calendar.DAY_OF_WEEKを参照すると、
1〜7の値が返って来るような仕様になっています。
0〜6の方が便利だと思うんですけどね。
というわけで、このような配列の宣言になっています。