Time.get_datetime_dict_from_system
2026/4/14大约 3 分钟
最后更新日期:2026-04-16
最后同步日期:2026-04-15 | Godot 官方原文 — Time.get_datetime_dict_from_system
Time.get_datetime_dict_from_system
定义
Time.get_datetime_dict_from_system 返回当前系统的日期和时间的详细信息——年、月、日、时、分、秒,全部装在一个字典(Dictionary)里返回。
打个比方:GetUnixTimeFromSystem() 返回的是"从 1970 年到现在的秒数"(一串大数字),对人来说不太直观。而 GetDatetimeDictFromSystem() 就像帮你把那个大数字翻译成了"2025 年 4 月 15 日 下午 3:30:45"这样人能直接读懂的格式。
在游戏开发中,当你需要显示"当前时间"给玩家看、或者根据日期做特定逻辑(比如周末双倍经验、节假日活动)时,就需要用到这个方法。
函数签名
C#
// Time.GetDatetimeDictFromSystem 获取系统日期时间字典
public static Dictionary GetDatetimeDictFromSystem(bool utc = false)GDScript
static func get_datetime_dict_from_system(utc: bool = false) -> Dictionary参数说明
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
utc | bool | 否 | false | 是否使用 UTC(协调世界时)。false 为本地时间,true 为 UTC 时间 |
返回值
Dictionary —— 包含以下键的字典:
| 键 | 类型 | 说明 | 示例 |
|---|---|---|---|
year | int | 年份 | 2025 |
month | int | 月份(1-12) | 4 |
day | int | 日期(1-31) | 15 |
weekday | int | 星期几(0=周日, 1=周一, ..., 6=周六) | 2(周二) |
hour | int | 小时(0-23) | 15 |
minute | int | 分钟(0-59) | 30 |
second | int | 秒(0-59) | 45 |
代码示例
基础用法:获取并打印当前时间
C#
using Godot;
public partial class MyScene : Node
{
public override void _Ready()
{
var dt = Time.GetDatetimeDictFromSystem();
GD.Print($"日期: {dt["year"]}-{dt["month"]}-{dt["day"]}");
// 运行结果: 日期: 2025-4-15
GD.Print($"时间: {dt["hour"]}:{dt["minute"]}:{dt["second"]}");
// 运行结果: 时间: 15:30:45
}
}GDScript
extends Node
func _ready():
var dt = Time.get_datetime_dict_from_system()
print("日期: ", dt["year"], "-", dt["month"], "-", dt["day"])
# 运行结果: 日期: 2025-4-15
print("时间: ", dt["hour"], ":", dt["minute"], ":", dt["second"])
# 运行结果: 时间: 15:30:45实际场景:周末双倍经验判断
C#
using Godot;
public partial class RewardManager : Node
{
[Export] public int ExNormalExp = 100;
[Export] public int ExWeekendBonus = 200;
private static readonly string[] WeekdayNames = {
"周日", "周一", "周二", "周三", "周四", "周五", "周六"
};
public int CalculateExpReward()
{
var dt = Time.GetDatetimeDictFromSystem();
int weekday = (int)dt["weekday"];
// weekday: 0=周日, 6=周六
bool isWeekend = (weekday == 0 || weekday == 6);
int exp = isWeekend ? ExNormalExp + ExWeekendBonus : ExNormalExp;
GD.Print($"今天是{WeekdayNames[weekday]},获得经验: {exp}");
// 运行结果: 今天是周六,获得经验: 300
return exp;
}
}GDScript
extends Node
@export var normal_exp: int = 100
@export var weekend_bonus: int = 200
const WEEKDAY_NAMES = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
func calculate_exp_reward() -> int:
var dt = Time.get_datetime_dict_from_system()
var weekday = dt["weekday"]
# weekday: 0=周日, 6=周六
var is_weekend = (weekday == 0 or weekday == 6)
var exp = normal_exp + weekend_bonus if is_weekend else normal_exp
print("今天是%s,获得经验: %d" % [WEEKDAY_NAMES[weekday], exp])
# 运行结果: 今天是周六,获得经验: 300
return exp进阶用法:格式化显示当前日期时间
C#
using Godot;
public partial class ClockDisplay : Label
{
public override void _Process(double delta)
{
var dt = Time.GetDatetimeDictFromSystem();
string dateStr = $"{dt["year"]:D4}-{dt["month"]:D2}-{dt["day"]:D2}";
string timeStr = $"{dt["hour"]:D2}:{dt["minute"]:D2}:{dt["second"]:D2}";
Text = $"{dateStr} {timeStr}";
// 运行结果(显示在 Label 上): 2025-04-15 15:30:45
}
}GDScript
extends Label
func _process(delta):
var dt = Time.get_datetime_dict_from_system()
var date_str = "%04d-%02d-%02d" % [dt["year"], dt["month"], dt["day"]]
var time_str = "%02d:%02d:%02d" % [dt["hour"], dt["minute"], dt["second"]]
text = "%s %s" % [date_str, time_str]
# 运行结果(显示在 Label 上): 2025-04-15 15:30:45注意事项
weekday从 0 开始,0 是周日:这和很多人直觉不同(周一 = 1,周六 = 6,周日 = 0),使用时要注意。- 月份从 1 开始:一月是 1,十二月是 12,这个符合日常习惯。
- 返回的是系统本地时间:默认返回的是玩家电脑设置的本地时间。如果需要全球统一的时间,传入
utc: true获取 UTC 时间。 - 受系统时间影响:如果玩家修改了电脑时间,返回值也会变化。不要用它做反作弊验证。
- 每帧调用有开销:如果在
_Process中每帧调用,会有轻微性能开销。如果只是显示时间,可以考虑降低更新频率。
