You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python拆分含T的非格式化日期时间字符串转标准格式输出异常如何解决

错误原因
  • 核心逻辑错误:你多次调用content.find("")查询空字符串,Python中str.find("")会直接返回传入的起始位置下标值,你代码中所有带nd后缀的变量存储的都是数字下标而非截取到的日期时间内容,输出的3-5-7本质是下标数字的拼接,不是日期值。
  • 文件操作逻辑错误:你两次打开startup.ssc都用了w写入模式,第二次打开时会直接清空第一次写入的原始内容;且你完全没有读取文件内容赋值给content变量,content为空或无定义的情况下,find方法返回值都是无效的。
  • 字符串截取逻辑错误:你没有正确截取子串,仅获取了下标值,没有通过content[起始:结束]的语法截取对应位置的字符串内容。
修复方案

你的输入格式是固定的YYYYMMDDTHHMM结构,不需要多次调用find定位,直接按固定长度切片即可,也不需要重复打开文件写入,单次操作即可完成:

# 假设原始date变量为YYYYMMDD格式,time变量为HHMM格式,直接按位拆分拼接
formatted_dt = f"{date[:4]}-{date[4:6]}-{date[6:8]}T{time[:2]}:{time[2:4]}:00"

# 单次写入即可
stella = open(f"{stellocation}\\scripts\\startup.ssc", 'w')
stella.write(f'core.setDate("{formatted_dt}","UTC");\n')
stella.close()

如果你的需求是必须从已有的文件内容中解析已写入的原始core.setDate语句,可以用正则匹配简化操作:

import re

# 先读取文件内容
with open(f"{stellocation}\\scripts\\startup.ssc", 'r') as f:
    content = f.read()

# 匹配原始日期时间串
match_res = re.search(r'core.setDate\("(\d{8})T(\d{4})","UTC"\);', content)
if match_res:
    raw_date = match_res.group(1)
    raw_time = match_res.group(2)
    formatted_dt = f"{raw_date[:4]}-{raw_date[4:6]}-{raw_date[6:8]}T{raw_time[:2]}:{raw_time[2:4]}:00"
    # 格式化后写回文件
    with open(f"{stellocation}\\scripts\\startup.ssc", 'w') as f:
        f.write(f'core.setDate("{formatted_dt}","UTC");\n')

内容的提问来源于stack exchange,提问作者Calvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:18:01