You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java带时间倍率的游戏内指定整点现实时长计算求助

艾欧泽亚时间指定整点的现实倒计时计算方案

核心逻辑

艾欧泽亚时间流速是现实的 20.571428571428573倍,简单说:

  • 现实1秒 ≈ 艾欧泽亚20.5714秒
  • 艾欧泽亚1秒 = 现实 1 / 20.571428571428573 秒

要计算距离下一个指定整点的现实时长,只需要先算出艾欧泽亚时间内的间隔,再除以倍率转换为现实时间即可。


具体实现步骤

1. 计算当前艾欧泽亚时间的核心数值

先把当前现实时间转成艾欧泽亚的总毫秒数,再推导总分钟数和当前小时数:

long currentRealMs = System.currentTimeMillis();
// 现实毫秒转艾欧泽亚毫秒
long eorzeaMs = (long) (currentRealMs * EORZEA_CONSTANT);
// 艾欧泽亚累计总分钟数
long eorzeaTotalMinutes = eorzeaMs / 60000; // 60000 = 1000*60
// 当前艾欧泽亚小时数(和你现有代码逻辑一致)
int currentEorzeaHour = (int) ((eorzeaMs / 3600000) % 24); // 3600000 = 1000*60*60

2. 计算艾欧泽亚时间内到目标整点的间隔

假设目标整点是targetHour(比如14、16),分两种情况计算:

int targetHour = 14; // 替换成你需要的整点
long minutesToNextTarget;

if (currentEorzeaHour < targetHour) {
    // 当前小时还没到目标整点,算当天剩余时间
    minutesToNextTarget = (targetHour - currentEorzeaHour) * 60 - (eorzeaTotalMinutes % 60);
} else {
    // 当天目标整点已过,算第二天的同一整点
    minutesToNextTarget = (24 - currentEorzeaHour + targetHour) * 60 - (eorzeaTotalMinutes % 60);
}

// 刚好是整点时,直接返回下一天的间隔(避免返回0)
if (minutesToNextTarget == 0) {
    minutesToNextTarget = 24 * 60;
}

3. 转换为现实时间间隔

把艾欧泽亚的分钟间隔转成现实毫秒数:

long realMsToNextTarget = (long) (minutesToNextTarget * 60000 / EORZEA_CONSTANT);

这个realMsToNextTarget就是现实中距离下一个艾欧泽亚目标整点的毫秒数,直接用来做倒计时即可。


封装成可复用方法

把上面的逻辑打包成方法,方便随时调用:

private static final double EORZEA_CONSTANT = 20.571428571428573;

public static long getRealMsToNextEorzeaHour(int targetHour) {
    // 参数合法性校验
    if (targetHour < 0 || targetHour >= 24) {
        throw new IllegalArgumentException("目标整点必须在0-23之间");
    }

    long currentRealMs = System.currentTimeMillis();
    long eorzeaMs = (long) (currentRealMs * EORZEA_CONSTANT);
    long eorzeaTotalMinutes = eorzeaMs / 60000;
    int currentEorzeaHour = (int) ((eorzeaMs / 3600000) % 24);

    long minutesToNextTarget;
    if (currentEorzeaHour < targetHour) {
        minutesToNextTarget = (targetHour - currentEorzeaHour) * 60 - (eorzeaTotalMinutes % 60);
    } else {
        minutesToNextTarget = (24 - currentEorzeaHour + targetHour) * 60 - (eorzeaTotalMinutes % 60);
    }

    if (minutesToNextTarget == 0) {
        minutesToNextTarget = 24 * 60;
    }

    return (long) (minutesToNextTarget * 60000 / EORZEA_CONSTANT);
}

使用示例

比如获取下一个16点的现实倒计时:

long msTo16 = getRealMsToNextEorzeaHour(16);
// 转换为时分秒格式
long hours = msTo16 / 3600000;
long minutes = (msTo16 % 3600000) / 60000;
long seconds = (msTo16 % 60000) / 1000;
System.out.printf("距离下一个艾欧泽亚16点还有:%d小时%d分%d秒%n", hours, minutes, seconds);

内容的提问来源于stack exchange,提问作者fiedlerdani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:45:32