Skip to main content
 首页 » 编程设计

python之如何转换为日期时间

2025年05月04日13dflying

我有 CSV 文件,其中包含日期,看起来像:

2014-01-25 00:14:08.000 

现在我解析 CSV 文件并获取日期。然后我运行一个正则表达式来检查日期是否有效(与上面的格式匹配)然后我将日期从 CSV 文件转换为 DateTime。

这怎么给了我一个 ValueError: 声明:需要超过 3 个值来解包。 CSV 文件可以包含数以千计的记录,这些记录的日期与上述类似。

我的正则表达式:

date_re_time_norm = re.compile("""^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[ ](\d\d:\d\d:\d\d.\d\d\d)$""", re.I) 

我的转换方法:

def convert_date(self, dstring): 
    if self.date_re_time_norm.match(dstring): 
        year, month, day, hour, minute, second = str(dstring).split('-') 
    return datetime(int(year), int(month), int(day), int(hour), int(minute), int(second), 0, 0, 0, 0, 0, 0) 

为了便于阅读,缩短了方法。

我做错了什么吗?

请您参考如下方法:

用datetime.strptime会好很多:

from datetime import datetime 
 
d = datetime.strptime("2014-01-25 00:14:08.000", "%Y-%m-%d %H:%M:%S.%f") 

这可以替换您的两个正则表达式,因为如果格式合适,它将解析日期,否则会引发错误:

def convert_date(self, dstring, format="%Y-%m-%d %H:%M:%S.%f"): 
    try: 
        return datetime.strptime(dstring, format) 
    except ValueError: 
        # wrong format 

(您可以根据需要将格式字符串设为类或实例属性)。


编辑:如果您决心坚持使用正则表达式,则需要进行更多拆分:

date, time = dstring.split(" ") 
year, month, day = date.split("-") 
hour, minute, second = time.split(":") 
second = second.split(".")[0] 
return datetime(*map(int, (year, month, day, hour, minute, second))) 

然而,在 Python 中,"There should be one-- and preferably only one --obvious way to do it"那就是 strptime。