けさらんぱの自由帳

とあるFF14プレイヤーがFF14のこととか関係ないことを書いていく予定のブログです。記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

【FF14】エオルゼア時間とUNIX時間

以前エッダちゃんの撮影に成功したとき、もしかしたら出現条件にエオルゼアの暦が関係あるのではと思って、撮影時刻からエオルゼア時間を出すために地球時間とエオルゼア時間の対応を調べたことがあります。

現在時刻とエオルゼア時間の対応を見るだけであれば、FF14俺tools:エオルゼアカレンダーでわかります。自分で計算するときに役立つ情報も書いてあるので非常に助かりました。

俺toolsに書いてあることと一部被りますが、エオルゼア時間と地球時間の対応はこうなっています。

エオルゼア時間 地球時間
1時間(60分) 175秒
1日(24時間) 70分
1ヶ月(32日) 37時間20分
1年(12ヶ月) 18日16時間

俺toolsのページには日本時間1970/1/1 00:00:00がエオルゼア時間1/1/1 00:00:00に対応すると書いてありますが、日本時間は世界標準時の間違いだと思います。ちなみに世界標準時1970/1/1/ 00:00:00から経過した秒数をUNIX時間と呼び(Wikipediaの記事)、Cを始めいろいろなプログラム言語やOSで使用されているようです。

具体的に計算するのに、自分は下記のPythonスクリプトを使用しています。俺toolsのページと同じくエオルゼア時間での年が出てきますが、計算上の都合で出てくるものでそれ以上の意味はないはずです。

#!/usr/bin/python3

import sys
import time

def lt2et(lt):
    # UNIX時間を求める
    ut = time.mktime(lt)

    # エオルゼア時間1/1/1 00:00:00から経過した秒数を求める
    et_seconds = ut * 60.0 / 175.0
    # エオルゼア時間1/1/1 00:00:00から経過した時間を求める
    et_hours = ut / 175.0
    # エオルゼア時間1/1/1 00:00:00から経過した日数を求める
    et_days = et_hours / 24.0
    # エオルゼア時間1/1/1 00:00:00から経過した月数を求める
    et_months = et_days / 32.0

    # エオルゼア時間の年を計算する
    et_year = et_months / 12.0 + 1.0
    # エオルゼア時間の月を計算する
    et_month = et_months % 12.0 + 1.0
    # エオルゼア時間の日を計算する
    et_date = et_days % 32.0 + 1.0
    # エオルゼア時間の時刻を計算する
    et_hour = et_hours % 24.0
    et_minute = et_seconds % 60.0

    return et_year, et_month, et_date, et_hour, et_minute

if __name__ == "__main__":
    if len(sys.argv) < 3:
        lt = time.localtime()
    else:
        lt = time.strptime("%s %s" % (sys.argv[1], sys.argv[2]), "%Y-%m-%d %H:%M:%S")

    et_year, et_month, et_date, et_hour, et_minute = lt2et(lt)
    print("%4d-%02d-%02d %02d:%02d" % (int(et_year), int(et_month), int(et_date), int(et_hour), int(et_minute)))

記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。