应优先使用workbuddy注入的__system__变量中timestamp字段获取当前时间,若失效则检查“注入系统变量至技能上下文”开关是否开启、docker容器是否挂载宿主机时区文件、requirements.txt是否声明zoneinfo或pytz依赖。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在WorkBuddy技能中调用获取当前时间的函数(如datetime.now()或time.time())时返回空值、错误时间或抛出NameError/ImportError,则可能是由于系统时间变量未被正确注入或Python运行环境缺失标准库模块路径。以下是解决此问题的步骤:
一、检查并启用内置系统变量自动注入机制
WorkBuddy默认在技能执行上下文中预置__system__对象,其中包含timestamp、timezone等动态字段,但该功能需显式开启才能生效,否则技能代码无法访问。
1、打开WorkBuddy主界面,点击右上角头像进入【设置】。
2、选择【安全与权限】→【执行环境策略】。
3、确认“注入系统变量至技能上下文”开关处于开启状态(绿色)。
4、若此前为关闭状态,开启后需重启WorkBuddy客户端使配置生效。
二、在技能代码中使用预置系统变量替代本地时间调用
直接调用Python原生时间函数可能因沙箱限制或模块隔离而失败;应优先使用WorkBuddy注入的标准化时间戳,确保跨平台一致性与权限兼容性。
1、在技能的main.py中,将原from datetime import datetime及datetime.now()调用替换为从params中提取:
2、修改execute(params: dict) -> dict:函数体,在首行添加:current_time = params.get("__system__", {}).get("timestamp")。
3、后续逻辑中直接使用current_time变量(格式为ISO 8601字符串,如"2026-04-14T01:56:22+08:00")。
4、如需转换为本地datetime对象,使用from dateutil.parser import isoparse解析,避免strptime硬编码格式错误。
WorkBuddy 5.3.8于2026年7月30日发布,修复文件监听卡顿、监听句柄泄漏、历史任务无法恢复、登录状态同步异常、命令环境检测异常及内部消息展示等问题,桌面端运行更稳定。
三、手动配置环境变量映射并挂载至容器运行时
当WorkBuddy以Docker容器方式部署时,宿主机时间不会自动同步至容器内,且容器默认不挂载/etc/localtime,导致time.time()返回UTC而非本地时区时间。
1、执行docker ps | grep workbuddy获取当前容器ID。
2、停止容器:docker stop <container_id></container_id>。
3、重新运行容器时添加时间相关挂载参数:-v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro。
4、启动后进入容器验证:docker exec -it <container_id> sh -c "date && cat /etc/timezone"</container_id>,输出应与宿主机date命令一致。
四、在技能包中声明依赖并初始化时区感知模块
部分技能需在运行前加载时区信息,若未显式声明pytz或zoneinfo依赖,会导致datetime.now(tz=...)调用失败。
1、在技能根目录下确认存在requirements.txt文件。
2、向该文件中追加一行:zoneinfo; python_version >= "3.9" 或 pytz(根据Python版本选择)。
3、在main.py的execute函数开头添加时区初始化逻辑:
4、插入代码:from zoneinfo import ZoneInfo; from datetime import datetime; local_tz = ZoneInfo("Asia/Shanghai")。
5、使用datetime.now(local_tz)替代无参datetime.now()调用。










