/time 时间控制
查询或设置游戏内时间,支持时间增减、预设时刻与昼夜循环控制
/time 用于查询或设置游戏内的时间,可以切换昼夜阶段、推进或回拨时间,以及读取当前时间数值。基岩版 1.17.30 起,/time set <数量> 改为直接设定昼夜循环时间,而不再累加推进到目标时刻。
原理
Minecraft 的「时间」并不是一个简单的时刻,而是由多个相互独立、各司其职的计数器共同构成,它们作为世界的持久化状态保存在存档的 level.dat 中。理解这些计数器是掌握 /time 的关键:
- 世界游戏时间(
gametime):自世界创建以来累计经过的游戏刻总数,内部以 64 位整数存储,只会随世界运行单调增长,用作各种「绝对时间」系统的参照。 - 昼夜循环时间:驱动太阳、月亮与天空颜色变化的连续时间值,每 24000 刻(即 20 分钟真实时间)完成一轮昼夜循环。
- 当天时间(
daytime):昼夜循环时间对 24000 取模后的结果,范围 0 到 23999,决定「现在是一天中的哪一刻」。 - 天数(
day):昼夜循环时间整除 24000 得到的整数值,表示已经完整经过的天数。
/time set 与 /time add 改写的是昼夜循环时间这一计数器。执行后太阳与月亮的位置、天空颜色以及环境光照会立即变化,依赖昼夜判断的系统(如敌对生物的生成、村民入睡、亡灵生物在阳光下燃烧等)也会同步响应。gametime 与这些命令相互独立,/time set 和 /time add 都不会回拨或篡改世界的总运行刻数,它只随世界正常运转而增长。/time query 则只读取不修改,把查询到的数值返回给执行者。
昼夜循环时间与 doDaylightCycle 游戏规则紧密耦合。当该规则设为 false 时,昼夜循环时间停止增长,太阳与月亮被「冻结」在当前位置,天空不再随时间流转,但 gametime 依然继续累积,这正是「锁定白天」等玩法的实现基础。基岩版还有一处与 Java 版不同的行为:使用预设时刻(如 day、noon)时,基岩版会把昼夜循环时间向前推进到下一个该时刻,而不是直接改写。例如当前已处于第 1 天的 1000 刻之后,再执行 /time set day 会推进到第 2 天的 1000 刻,天数只增不减;只有直接指定数字(如 /time set 1000)才会原地改写到对应数值。这一「向前推进」的行为在 1.17.30 之前同样作用于数字参数,之后数字参数才改为直接设定。
子命令一览
| 子命令 | 作用 |
|---|---|
add | 在当前昼夜循环时间上累加指定刻数 |
set | 设定昼夜循环时间(直接写数值,或推进到预设时刻) |
query | 查询当前时间数值(当天时间、世界游戏时间或天数) |
语法
/time add <数量>
/time set <数量>
/time set <预设时刻>
/time query <查询类型>
参数
<数量>— 整数,表示要设定或增减的游戏刻数。用在/time set时直接把昼夜循环时间改写为该数值;用在/time add时在当前值上累加。一天为 24000 刻,可以填写大于 24000 的数值来表示跨越多个昼夜。<预设时刻>— 枚举,用在/time set时把时间推进到指定的昼夜阶段。可选值:day、noon、sunset、night、midnight、sunrise,具体对应数值见「预设时刻」章节。<查询类型>— 枚举,用在/time query时指定要查询的时间类型。可选值:daytime(当天时间)、gametime(世界总游戏刻数)、day(已过的天数)。
预设时刻
| 预设时刻 | 对应刻数 | 对应阶段 |
|---|---|---|
day | 1000 | 白天(日出后不久) |
noon | 6000 | 正午 |
sunset | 12000 | 日落(进入夜晚) |
night | 13000 | 夜晚(日落后不久) |
midnight | 18000 | 午夜 |
sunrise | 23000 | 黎明前(即将日出) |
一轮昼夜以 0 刻为日出(一天的开始),6000 刻为正午,12000 刻为日落,18000 刻为午夜,24000 刻重新回到 0 刻开启新的一天。其中 sunrise 与 sunset 是基岩版独有的预设时刻,Java 版只提供 day、noon、night、midnight 四个。
示例
将时间设为白天:
/time set day
把昼夜循环推进到下一个「白天」时刻(1000 刻),天空立即转亮,阳光重新照射,适合快速结束夜晚。
时间前进 1000 刻:
/time add 1000
在当前昼夜循环时间上累加 1000 刻(约 50 秒真实时间),太阳与月亮沿轨迹向前移动一小段,可用于缓慢推进时间或微调昼夜阶段。
设为正午并锁定时间:
/time set noon
/gamerule doDaylightCycle false
先把时间推进到正午(6000 刻),再关闭昼夜循环,让太阳停留在天空最高点,实现永久的白天。
查询当天时间:
/time query daytime
在聊天栏返回当前「当天时间」(0 到 23999 的整数),可用于调试或记录时间数值。
基岩版注意
- 需要 OP 等级 1,并且必须在开启作弊(cheats)的世界中执行。
- 与 Java 版差异:Java 版
/time需要 OP 等级 2,且支持带单位的时间参数(如1d、20s、100t),基岩版只接受纯整数刻数。 - 基岩版使用预设时刻(
day、noon等)时是「向前推进」到目标时刻,而非直接改写;/time set <数量>在 1.17.30+ 已改为直接设定,旧版本为累加推进。 - 基岩版提供 Java 版没有的
sunrise(23000)和sunset(12000)两个预设时刻。 - 基岩版
/time query的返回值只显示在聊天栏,无法通过/execute store读取或存储,因此无法把时间数值写入计分板或用于条件判断。 - 锁定时间需配合
/gamerule的doDaylightCycle规则;关闭后昼夜循环时间停止增长,但gametime仍继续累积。
常见问题
执行 `/time set day` 后为什么天数没有回到 0?
基岩版使用预设时刻时是向前推进而非直接改写。如果当前已经过了当天的 1000 刻,/time set day 会推进到下一轮的 1000 刻,天数只会增加不会减少。要直接设定某个刻数,请使用 /time set 1000。
如何让世界永远是白天?
先执行 /time set day 或 /time set 6000 把时间调到白天,再执行 /gamerule doDaylightCycle false 关闭昼夜循环。需要恢复时执行 /gamerule doDaylightCycle true 即可。
`daytime`、`gametime` 和 `day` 有什么区别?
daytime 是当天时间(0 到 23999),gametime 是世界自创建以来累计的总游戏刻数,day 是已完整经过的天数。其中只有 gametime 不受 /time set、/time add 的影响。
把时间设到 0 刻是什么时刻?
0 刻是日出(一天的开始),而不是正午。一天中的关键刻度为:0 刻日出、6000 刻正午、12000 刻日落、18000 刻午夜。