将ISO 8601 datetime转为Jira兼容格式,求更Pythonic实现方案
适配JIRA REST API的Python日期时间格式转换优化
JIRA REST API对日期时间字符串的要求特殊且严格,与标准ISO 8601不完全兼容:
- ISO兼容格式示例:
2023-06-25T20:32:13+00:00 - JIRA兼容格式示例:
2023-06-25T20:32:13.00+0000
要让ISO格式适配JIRA,需做两处修改:
- 时区偏移采用
[+-]hhmm格式,而非ISO的[+-]hh:mm; - 必须包含小数秒(即使为0),例如
2023-06-25T20:32:13+0000不被接受,但2023-06-25T20:32:13.00+0000符合要求。
以下是你提供的转换代码:
import datetime planned_finish_date = (datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=5)).isoformat(sep='T', timespec='seconds') planned_finish_date = planned_finish_date.rsplit("+", 1)[0] + ".00+" + planned_finish_date.rsplit("+", 1)[1].replace(":", "")
更Pythonic的实现方式
直接使用datetime.strftime()进行格式化,一步生成符合要求的字符串,无需后续字符串拆分拼接:
import datetime # 生成目标时间 target_dt = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=5) # 直接格式化为JIRA兼容格式 jira_date = target_dt.strftime("%Y-%m-%dT%H:%M:%S.00%z")
strftime的%z参数会直接输出+HHMM格式的时区偏移,完全匹配JIRA要求,代码更简洁可读。
现成工具库推荐
如果频繁和JIRA API交互,推荐使用官方jira Python库(可通过pip install jira安装),它会自动处理日期时间格式转换,无需手动编写格式化逻辑:
from jira import JIRA import datetime # 初始化JIRA客户端 jira_client = JIRA(server='你的JIRA服务器地址', basic_auth=('用户名', '密码')) target_dt = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=5) # 创建Issue时直接传入datetime对象,库会自动转换为JIRA兼容格式 new_issue = jira_client.create_issue( project='项目键', summary='测试任务', description='任务描述', issuetype={'name': 'Task'}, duedate=target_dt # 直接传datetime对象即可 )
内容的提问来源于stack exchange,提问作者Ameen Ali Shaikh
相关产品推荐
相关产品推荐

