jsr223中 python脚本 获取这种格式的当前时间 2026-03-25T07:45:32.293Z

JSR223 (如 JMeter、Nashorn 等环境) 中使用 Python 脚本(通常是通过 JythonGraalPython 引擎)时,获取带毫秒和 Z 后缀的 UTC 时间格式,核心逻辑与普通 Python 一致,但需要注意环境兼容性

大多数 JSR223 环境中的 Python 实现(特别是 Jython 2.7)基于 Python 2.7,不支持 timezone.utcf-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)

关键点解析

  1. time.gmtime(time.time()):
    • time.time() 获取当前时间戳(浮点数)。
    • gmtime() 将时间戳转换为 UTC 时间结构体。这比 datetime.now() 更兼容旧版 Python,且直接规避了时区设置问题。
  2. 毫秒计算 int((time.time() * 1000) % 1000):
    • 由于 strftime 在旧版 Python 中不支持 %f (微秒) 或者处理起来较麻烦,直接通过数学运算从时间戳中提取毫秒是最可靠的方法。
  3. %03d:
    • 这是旧式字符串格式化语法,兼容 Python 2 和 3,确保毫秒数始终显示为 3 位(不足补零)。
  4. Z 后缀:
    • 手动拼接 Z,明确表示这是 UTC 时间。

在 JMeter 中的使用示例

如果你是在 Apache JMeterJSR223 SamplerPreProcessor 中使用:

  1. 语言选择:python (确保安装了 Jython 插件) 或 groovy (推荐,性能更好,语法类似)。
  2. 将上述代码放入脚本区域。
  3. 代码中的 vars.put("currentUtcTime", result) 会将时间字符串存入 JMeter 变量 currentUtcTime
  4. 后续请求中可以使用 ${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 环境中也能完美运行,兼容性最强。

posted @ 2026-03-26 09:04  chuangzhou  阅读(3)  评论(0)    收藏  举报