雅白
FFXIV 换算地球时间为艾欧泽亚时间
最终幻想 14 有三个时间,服务器时间(UTC)、艾欧泽亚时间和本地时间。
服务器时间没的说,就是 GMT+0 时间;本地时间是玩家当地时间,中国在 GMT+8 时区。而艾欧泽亚时间是游戏内日月交替的时间,流速比地球时间快,艾欧泽亚时间还涉及到了采集职业,掌握了艾欧泽亚时间对应的采集方向就可以针对性的高效采集。
艾欧泽亚时间流速比地球时间快,60 分钟的艾欧泽亚时间差不多等于不到 3 分钟的地球时间。观察一下均匀的时间变化可以看出似乎艾欧泽亚时间只是单纯的地球时间乘以某个常数的结果。
经过简单的几次试验推出艾欧泽亚时间基于 Unix(1970-01-01) 时间而非从 0001-01-01 开始的时间。
根据 http://ffxiv.gamerescape.com/wiki/Time 的说明
Eorzean Increments | Components in Eorzean Units | Conversion into Earth Time |
---|---|---|
1 minute | 60 seconds | 2 11⁄12 seconds |
1 bell | 60 minutes | 2 minutes, 55 seconds |
1 sun | 24 bells | 70 minutes |
1 week | 8 suns | 9 hours, 20 minutes |
1 moon | 32 suns | 37 hours, 20 minutes |
1 year | 12 moons | 18 days, 16 hours |
1 Bell = 60 分钟 = 3600 秒,就可以换算出时间常数
3600/175≈20.57142857142857
结合 Google 到的轮子验证思路是正确的。
写了个 Golang 的转换库 https://github.com/violarulan/EorzeaTimeConvert
Example
package main
import (
"fmt"
"time"
c "github.com/violarulan/EorzeaTimeConvert"
)
func main(){
// Convert a time.Time to a EorzeaTime
var ret = c.ConvertToEorzeaTime(time.Now())
fmt.Println(ret)
// {924 6 30 2 31 53}
var str = c.ConvertToEorzeaTimeString(time.Now(), "%s-%s-%s %s:%s:%s")
fmt.Println(str)
// 924-06-30 08:01:22
}