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

如何在Python中将日期时间格式化为含星号/通配符的字符串?

实现自定义日期时间格式化,替换指定部分为星号

Python的datetime构造函数不支持传入*作为参数,不过可以通过以下几种方式实现你想要的效果:

方法一:直接字符串拼接(最简单场景)

如果只需要固定输出日期部分_***的格式,直接提取日期部分后拼接星号即可:

from datetime import datetime

dt = datetime(2022, 1, 1, 12)
output = f"{dt.strftime('%Y%m%d')}_***"
print(output)  # 输出:"20220101_***"

方法二:格式化后按需替换

如果需要更灵活地替换特定时间字段为星号,可以先正常格式化,再替换对应内容:

from datetime import datetime

dt = datetime(2022, 1, 1, 12, 30, 45)
# 方式1:替换格式化字符串中指定位置的内容
formatted = dt.strftime("%Y%m%d_%H%M%S")
output = formatted.replace(formatted[9:], "***")

# 方式2:截取固定部分后拼接星号(更直观)
output = f"{dt.strftime('%Y%m%d')}_***"
print(output)  # 输出:"20220101_***"

方法三:自定义类模拟支持*参数的datetime

如果希望模拟传入*参数的行为,可以自定义一个继承自datetime的类,处理*标记并在格式化时自动替换对应部分:

from datetime import datetime

class StarDatetime(datetime):
    def __init__(self, year, month, day, hour=0, minute="*", second="*", microsecond="*"):
        # 将*转换为datetime可接受的数字参数,同时记录需要替换的字段
        self.star_fields = []
        if minute == "*":
            self.star_fields.append("%M")
            minute = 0
        if second == "*":
            self.star_fields.append("%S")
            second = 0
        if microsecond == "*":
            self.star_fields.append("%f")
            microsecond = 0
        super().__init__(year, month, day, hour, int(minute), int(second), int(microsecond))
    
    def strftime(self, fmt):
        result = super().strftime(fmt)
        # 如果需要将时分秒整体替换为***,直接覆盖对应部分
        if "%H%M%S" in fmt and len(self.star_fields) >= 2:
            result = result.replace(super().strftime("%H%M%S"), "***")
        return result

# 使用示例
dt = StarDatetime(2022, 1, 1, 12, "*", "*", "*")
output = dt.strftime("%Y%m%d_%H%M%S")
print(output)  # 输出:"20220101_***"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:24