python datetime遇到ValueError:does not match format的格式%p问题

在处理datetime时遇到ValueError,提示时间数据与'%d/%m/%Y %I:%M:%S %p'格式不匹配。问题出现在%p在中文环境下表示为“上午”或“下午”,而非AM/PM。解决方案包括替换字符串或设置本地时间设定以适应不同系统环境。

在日常使用虚拟环境的时候,使用不同的库的效果有些不大相同,曾经尝试过在使用datetime报错的时候,提示时输入的格式与文本不匹配。

ValueError: time data '1/8/2019 8:19:27 AM' does not match format '%d/%m/%Y %I:%M:%S %p'

在检查文本格式并没有发现不匹配的问题,

在jupyter notebook上运行也没有报错,甚至到该环境下的python中运行也没有报错。这会是什么问题呢?

正常调试也没有报错。这是什么原因呢?

from datetime import datetime

datetime.strptime('1/8/2019 8:19:27 AM', '%d/%m/%Y %I:%M:%S %p')

检验:

但是在运行脚本的时候总是报错ValueError,而且在使用pyinstaller库进行打包得到的exe也是得到一个datetime格式不匹配的报错。

但是在虚拟环境下使用python xxxx.py 运行的脚本模式是可以正常运行的。

 

查阅资料显示,网上说的是:

在使用在不同的虚拟环境下的环境导致的,要设置环境的问题。但这是在linux上的问题。

最后还是使用了一个能运行的正常的环境进行打包。

问题求解,感谢各位

最后在datetime下测试一个时间的转换得到的结果发现%p的参数所对应的文本不是AM\PM而是中文的上下午。

问题解决:

方案一:

关于使用到%p格式的问题,由于datetime 是读取本地系统环境的格式,时间格式%p是可以表示为AM或PM的,但是由于是中文环境下导致%p的格式为上午或下午。所以相应的'1/8/2019 8:19:27 AM'格式要replace为上下午

python datetime strtime的格式说明

f = lambda x: '上午' if x == 'AM' else '下午'
S = Senttime[0].replace(Senttime[0][-2:], f(Senttime[0][-2:]))

 

方案二:(推荐)

设置本地时间设定,由于不同系统间的地区编码可能存在差异,先适用windows 、uUbuntu上使用本地时间的地区设定。

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # 中文为zh_CN.UTF-8,会出现错误
datetime.strptime('1/8/2019 8:19:27 AM', '%d/%m/%Y %I:%M:%S %p')

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值