如何在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
相关产品推荐
相关产品推荐

