ヴァナディールの時間って?(もっと詳しく)
さて、地球時間とヴァナディール時間の関係は地球時間の25倍で、ヴァナディールの1日は地球時間の57分36秒。。。。で?
「ヴァナディールの1日が地球時間の約1時間、これで良いではないか、3分以内は誤差の内」と言われる方も多いと思います。「57分36秒?。。。5へーだね」確かに知らなくても問題は無いのですが、この関係を利用して、ヴァナディールの次の満月は地球時間の何時かがわかるとしたら?次の光曜日が地球時間の何時から何時までというのが解るとしたら?
興味の無い方には時間の無駄ですので、お戻りください。
ヴァナディールの時間計算
地球時間からヴァナの時間を計算する方法
この計算をするためには、まずそれぞれ(ヴァナディールと地球時間)の基準となる時間を決定しなければなりません。
この基準はゲーム中に表示できる、日付時刻を元に、西暦とヴァナディール暦がそれぞれキリがよくなる時間を逆算して求めた結果、以下の様になりました。
西暦2002年1月1日0時0分0秒を0とした現在までの秒数を25倍したものが
ヴァナディール暦0898年2月1日0時0分0秒からの経過時間
ヴァナディール暦
地球暦と違いヴァナディール暦は、1週間8日(V)、1ヶ月30日(V)、1年12ヶ月(V)という扱いになっていて、うるう年とかはありません。
ヴァナディールの1年は360日(V)になります。
次に地球暦の基準時間から現在までの経過秒を求めます。
地球暦2000/1/1 00:00:00から現在までの秒数の求め方
地球暦は1ヶ月が28〜31と月によりバラバラでさらに4年に1度うるう年、100年に1度はうるう年ではなく、400年に1度はうるう年というように暦の計算はとても複雑です。
これを解決するために、グレゴリオ暦計算アルゴリズムを使用します。
グレゴリオ暦計算アルゴリズムを使用すると、西暦1年1月1日から指定した日付までの日数を求める事ができます。
現在が2004年1月1日とした場合、グレゴリオ暦で求めた現在までの日数から2002年1月1日までの日数を差し引けば2002年1月1日から現在までの日数が求められます。
グレゴリオ暦計算アルゴリズムはとても簡単ですので、少々紹介しましょう。
long greDay(long yyyy,long mm,long dd){
long y=yyyy;
long m=mm;
long d=dd;
if(m < 3){
y--;
m += 12;
}
long eDays = (365 * y + y / 4 - y / 100 + y / 400 + 306 * (m + 1) / 10 + d - 428);
return eDays;
}
このプログラムはJavaですが、通常の四則演算しか使用していませんので、BasicやCと言った他言語に変換するのはとても簡単だと思います。
因数yyyyに西暦、mmに月、ddに日を設定すると、結果として西暦1年1月1日から設定した日までの日数を計算してくれます。
”現在−2002年1月1日”で求めた日数に、24時間×60分×60秒(86400秒)を掛け算すると、2002年1月1日から現在までの経過秒(eSec)を求める事ができます。
ここで求めたeSecからヴァナディール時間を求める方法は、まずeSecを25倍したvSecを求めます。
vSecはヴァナディール暦0898年2月1日0時0分0秒からの経過秒と言うことになります。
ヴァナ暦でも1日は地球と同じ、24時間、60分、60秒が基準ですからvSecからヴァナディール時間は以下の方法で求められます。
vDays=vSec/86400 +30 ヴァナディール暦が2月1日から始まっているので、1ヶ月の日数を足す
vYear=vDays/360 + 898
vMonth=(vDays-(vYear*360))/12 + 1
vDay=vDaysを30で割った余り + 1
vSecs=vDaysを86400で割った余り
vHour=vSecs/3600
vMin=(vSecs-(vHour*60))/60
vSec=vSecsを60で割った余り
とても簡単ですね。
さてヴァナディールの曜日ですが、これも簡単に求められます。
先にも言いましたがヴァナディールの1週間8日で"火", "土", "水", "風", "氷", "雷", "光", "闇"と曜日が移り変わります。曜日にも基準があり、ヴァナディール暦0898年2月1日は火曜、新月ということになっています。
したがって、vDaysを8で割った余りが
0:火
1:土
2:水
3:風
4:氷
5:雷
6:光
7:闇
となります。
次に月齢を求めてみましょう。
ヴァナディールの月齢は
"新月(朔)", "三日月", "七日月","上弦の月","十日夜", "十三夜",
"満月", "十六夜","居待月","下弦の月","二十日余","二十六夜"
と12種類あり、ヴァナディール暦の7日で次の月齢に進みます。
したがって、vDaysを7で割、その答えを12で割った余りが
0:新月(朔)
1:三日月
2:七日月
3:上弦の月
4:十日夜
5:十三夜,
6:満月
7:十六夜
8:居待月
9:下弦の月
10:二十日余
11:二十六夜"
となります。