gcj/22


gcj

日付を取得する

時計を作るには日付を取得する Date クラスが必要なので用意します。残念ながらこのクラスもCNIの力を借ります。

java/util/Date.java

getDay() は曜日を取得するメソッド(日はgetDate())。有名なツェラーの公式をぱくります・・。

package java.util;

public class Date {
	public int year, month, date, hour, minutes, second;
	
	private native void create(Date date);
	
	public Date() {
		create(this);
	}
	
	public int getYear() {
		return this.year;
	}
	
	public int getMonth() {
		return this.month;
	}
	
	public int getDate() {
		return this.date;
	}
	
	public int getHours() {
		return this.hour;
	}
	
	public int getMinutes() {
		return this.minutes;
	}
	
	public int getSeconds() {
		return this.second;
	}
	
	public int getDay() {
		int y = this.year + 1900;
		int m = this.month + 1;
		int d = this.date;
		
		// Zeller formula
		
		if ((m == 1) || (m == 2)) {
			y--;
			m += 12;
		}
		
		return ((y + (int)(y/4) - (int)(y/100) + (int)(y/400) + (int)((13 * m + 8)/5) + d) % 7);
	}
}

java_util_Date.cpp

実際に日付を取得するCNI部分。MonaとPOSIX環境ではだいぶ違うのでそれぞれにあわせます。

#include <java/util/Date.h>
#include <gcj/cni.h>
#ifdef MONA
#include <monapi.h>
#include <sys/types.h>
#else
#include <stdio.h>
#include <time.h>
#endif

void
java::util::Date::create (::java::util::Date *date)
{
#ifdef MONA
	KDate kdate;
	syscall_get_date(&kdate);
	date->year = kdate.year - 1900;
	date->month = kdate.month - 1;
	date->date = kdate.day;
	date->hour = kdate.hour;
	date->minutes = kdate.min;
	date->second = kdate.sec;
#else
	time_t timer;
	struct tm *kdate;
	time(&timer);
	kdate = localtime(&timer);
	date->year = kdate.tm_year;
	date->month = kdate.tm_mon;
	date->date = kdate.tm_mday;
	date->hour = kdate.tm_hour;
	date->minutes = kdate.tm_min;
	date->second = kdate.tm_sec;
#endif
}

Main.java

本当は「2005年10月12日(水) 12時34分56秒」と表示させたいのですが、コンソールで日本語を表示させるのは面倒なので英語表記で表示してみます。この例だと+で文字列や数値をペタペタつっつけられるJavaのお手軽さが身にしみます。

import java.util.Date;

public class Main {
	public static void main(String[] args) {
		String[] weekdayList = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
		String[] monthList = {
			"Jan", "Feb", "Mar", "Apr", "May", "Jun",
			"Jly", "Aug", "Sep", "Oct", "Nov", "Dec"};
		Date date = new Date();
		System.out.println(
			weekdayList[date.getDay()] + " " +
			monthList[date.getMonth()] + " " +
			date.getDate() + " " +
			date.getHours() + ":" +
			date.getMinutes() + ":" +
			date.getSeconds() + " " +
			(date.getYear() + 1900));
	}
}

Monaでの実行例

gcj.gif

コメント

コメントはありません。 コメント/gcj/22?

お名前:

MENU

now: 2

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 3149, today: 1, yesterday: 0

添付ファイル: filegcj.gif 790件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (3735d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.072 sec.