jsr223中 python脚本 获取这种格式的当前时间 2026-03-25T07:45:32.293Z
在 JSR223 (如 JMeter、Nashorn 等环境) 中使用 Python 脚本(通常是通过 Jython 或 GraalPython 引擎)时,获取带毫秒和 Z 后缀的 UTC 时间格式,核心逻辑与普通 Python 一致,但需要注意环境兼容性。
大多数 JSR223 环境中的 Python 实现(特别是 Jython 2.7)基于 Python 2.7,不支持 timezone.utc 或 f-string。因此,最稳妥的方法是使用 time 模块配合手动格式化。
推荐代码 (兼容 Jython 2.7 和标准 Python)
这段代码不依赖高版本特性,能在绝大多数 JSR223 环境中运行:
import time
from datetime import datetime
# 1. 获取当前 UTC 时间戳
# time.time() 返回秒数(浮点数),gmtime 将其转换为 UTC 时间元组
utc_now = time.gmtime(time.time())
# 2. 获取毫秒部分
# time.time() * 1000 得到毫秒级时间戳,取整后对 1000 取余得到毫秒数
milliseconds = int((time.time() * 1000) % 1000)
# 3. 格式化日期时间部分 (不含毫秒)
# strftime 格式: 年-月-日T时:分:秒
date_part = time.strftime("%Y-%m-%dT%H:%M:%S", utc_now)
# 4. 拼接最终字符串
# 确保毫秒是 3 位 (例如 5 -> 005)
result = "%s.%03dZ" % (date_part, milliseconds)
# 在 JSR223 (如 JMeter) 中,通常需要将结果存入变量供后续使用
# 如果是 JMeter,变量名通常是 "vars"
if 'vars' in globals():
vars.put("currentUtcTime", result)
print("时间已存入变量 currentUtcTime: " + result)
else:
# 普通测试输出
print(result)
关键点解析
time.gmtime(time.time()):time.time()获取当前时间戳(浮点数)。gmtime()将时间戳转换为 UTC 时间结构体。这比datetime.now()更兼容旧版 Python,且直接规避了时区设置问题。
- 毫秒计算
int((time.time() * 1000) % 1000):- 由于
strftime在旧版 Python 中不支持%f(微秒) 或者处理起来较麻烦,直接通过数学运算从时间戳中提取毫秒是最可靠的方法。
- 由于
%03d:- 这是旧式字符串格式化语法,兼容 Python 2 和 3,确保毫秒数始终显示为 3 位(不足补零)。
Z后缀:- 手动拼接
Z,明确表示这是 UTC 时间。
- 手动拼接
在 JMeter 中的使用示例
如果你是在 Apache JMeter 的 JSR223 Sampler 或 PreProcessor 中使用:
- 语言选择:python (确保安装了 Jython 插件) 或 groovy (推荐,性能更好,语法类似)。
- 将上述代码放入脚本区域。
- 代码中的
vars.put("currentUtcTime", result)会将时间字符串存入 JMeter 变量currentUtcTime。 - 后续请求中可以使用
${currentUtcTime}来引用它。
备选方案:如果你的环境支持 Python 3 (如 GraalPython)
如果确定你的 JSR223 引擎使用的是较新的 Python 3 (例如通过 GraalVM 运行的 Python),可以使用更现代的写法:
from datetime import datetime, timezone
now = datetime.now(timezone.utc)
# 格式化并手动处理毫秒和 Z
ms = now.microsecond // 1000
result = now.strftime("%Y-%m-%dT%H:%M:%S") + ".%03dZ" % ms
if 'vars' in globals():
vars.put("currentUtcTime", result)
print(result)
建议优先使用第一种(time 模块)方案,因为它在老旧的 Jython 环境中也能完美运行,兼容性最强。
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/19774101

浙公网安备 33010602011771号