Time.get_unix_time_from_system
2026/4/14大约 3 分钟
最后更新日期:2026-04-16
最后同步日期:2026-04-15 | Godot 官方原文 — Time.get_unix_time_from_system
Time.get_unix_time_from_system
定义
Time.get_unix_time_from_system 返回当前系统的 Unix 时间戳——即从 1970 年 1 月 1 日 00:00:00(UTC)到现在的总秒数。
打个比方:想象有一条从 1970 年元旦零点开始延伸到未来的超长尺子,尺子上的刻度是秒。GetUnixTimeFromSystem() 就是看一眼这条尺子,告诉你"现在到了第几秒"。比如返回 1713244800 就表示从 1970 年元旦到现在已经过了 17 亿多秒。
在游戏开发中,Unix 时间戳常用于:计算两个时间点之间差了多少秒、与服务器同步时间、实现每日签到/奖励刷新、保存存档的时间标记等。
函数签名
C#
// Time.GetUnixTimeFromSystem 获取系统当前 Unix 时间戳
public static double GetUnixTimeFromSystem()GDScript
static func get_unix_time_from_system() -> float参数说明
此方法没有参数。
返回值
double / float —— 当前系统时间的 Unix 时间戳(秒),包含小数部分(即亚秒精度)。
代码示例
基础用法:获取当前 Unix 时间戳
C#
using Godot;
public partial class MyScene : Node
{
public override void _Ready()
{
double unixTime = Time.GetUnixTimeFromSystem();
GD.Print($"当前 Unix 时间戳: {unixTime}");
// 运行结果: 当前 Unix 时间_stamp: 1713244800.123(数值取决于实际时间)
}
}GDScript
extends Node
func _ready():
var unix_time = Time.get_unix_time_from_system()
print("当前 Unix 时间戳: ", unix_time)
# 运行结果: 当前 Unix 时间戳: 1713244800.123(数值取决于实际时间)实际场景:计算两个时间点的间隔
C#
using Godot;
public partial class DailyReward : Node
{
private double _lastRewardTime = 0;
public void ClaimReward()
{
double now = Time.GetUnixTimeFromSystem();
double elapsed = now - _lastRewardTime;
if (elapsed >= 86400) // 86400 秒 = 24 小时
{
GD.Print("领取每日奖励!");
// 运行结果: 领取每日奖励!
_lastRewardTime = now;
}
else
{
double remainingHours = (86400 - elapsed) / 3600.0;
GD.Print($"奖励冷却中,还需等待 {remainingHours:F1} 小时");
// 运行结果: 奖励冷却中,还需等待 18.5 小时
}
}
}GDScript
extends Node
var _last_reward_time: float = 0
func claim_reward():
var now = Time.get_unix_time_from_system()
var elapsed = now - _last_reward_time
if elapsed >= 86400: # 86400 秒 = 24 小时
print("领取每日奖励!")
# 运行结果: 领取每日奖励!
_last_reward_time = now
else:
var remaining_hours = (86400 - elapsed) / 3600.0
print("奖励冷却中,还需等待 %.1f 小时" % remaining_hours)
# 运行结果: 奖励冷却中,还需等待 18.5 小时进阶用法:保存和检查存档时间
C#
using Godot;
public partial class SaveManager : Node
{
private double _lastSaveTime = 0;
public void SaveGame()
{
_lastSaveTime = Time.GetUnixTimeFromSystem();
// 保存游戏数据(这里省略实际保存逻辑)
GD.Print($"游戏已保存,时间戳: {_lastSaveTime}");
// 运行结果: 游戏已保存,时间戳: 1713244800.123
}
public void CheckAutoSave()
{
double now = Time.GetUnixTimeFromSystem();
double elapsed = now - _lastSaveTime;
// 每 300 秒(5 分钟)自动保存一次
if (elapsed >= 300)
{
SaveGame();
}
else
{
double remaining = 300 - elapsed;
GD.Print($"距下次自动保存还有 {remaining:F0} 秒");
// 运行结果: 距下次自动保存还有 247 秒
}
}
}GDScript
extends Node
var _last_save_time: float = 0
func save_game():
_last_save_time = Time.get_unix_time_from_system()
# 保存游戏数据(这里省略实际保存逻辑)
print("游戏已保存,时间戳: ", _last_save_time)
# 运行结果: 游戏已保存,时间戳: 1713244800.123
func check_auto_save():
var now = Time.get_unix_time_from_system()
var elapsed = now - _last_save_time
# 每 300 秒(5 分钟)自动保存一次
if elapsed >= 300:
save_game()
else:
var remaining = 300 - elapsed
print("距下次自动保存还有 %.0f 秒" % remaining)
# 运行结果: 距下次自动保存还有 247 秒注意事项
- 返回的是系统时间:这个值来自操作系统时钟,如果用户修改了系统时间,返回值也会变化。
- 精度包含小数:返回值是
double/float类型,小数部分表示亚秒精度(大约到微秒级)。 - Unix 时间戳是全球统一的:不管你的电脑设的是什么时区,Unix 时间戳都是基于 UTC(协调世界时)的,全球所有设备在同一时刻获取到的值相同。
- 可用于与服务器通信:大多数后端服务都使用 Unix 时间戳,所以游戏端可以直接用这个值和服务器对时。
