python - Odoo12:strptime 无法识别格式 %p (PM/AM)?
问题描述
我在模型函数中有这段代码:
data_ordine = order_dict['date'].replace(" UTC","").rstrip()
_logger.info('Simone --> DATA ORDINE : %s',data_ordine + "|")
if data_ordine:
data_finale = datetime.strptime(data_ordine,"%m/%d/%Y %I:%M%p")
当我尝试执行它时,我收到此错误:
File "/usr/lib/python3.5/_strptime.py", line 346, in _strptime data_string[found.end():])ValueError: unconverted data remains: PM
在日志中,我保存了传递给strptime
函数的数据,我可以看到它是:
2020-01-21 11:12:36,221 24082 INFO db_test odoo.addons.tepp_ept.models.sale_order: Simone --> DATA ORDINE : 01/12/2020 10:42PM|
我已经在Python 在线编译器上尝试了代码,它似乎没问题:
from datetime import datetime
str_date ="01/12/2020 10:42PM"
date = datetime.strptime(str_date,"%m/%d/%Y %I:%M%p")
print(date)
我哪里错了?
解决方案
对于可能处于相同情况的情况,如@Adan-Cortez所示,它与语言环境设置(特别是 LC_TIME 设置)有关。我通过暂时重置它然后在strptime之后分配运算符值来解决它:
locale.setlocale(locale.LC_TIME, 'en_US.utf8')
if data_ordine:
data_finale = datetime.strptime(data_ordine,"%m/%d/%Y %I:%M%p")
locale.setlocale(locale.LC_TIME, self.env.context['lang'] + '.utf8')
推荐阅读
- python - 如何在 PySpark 数据帧的第 0 轴上找到数组(数组列)的平均值?
- c - 在 C 中使用堆栈检查回文
- flutter - 如何使用 Dart 解密 AES 256 CBC
- stripe-payments - Stripe 类中的方法 createToken 不能应用于给定类型;stripe.createToken(
- python - 在 Keras 中编写客户评估指标的问题
- next.js - 从性能中继层发生的下一个构建错误
- stm32 - 在 STM32F103 中按下释放按钮时,EXTI 线得到奇数/偶数中断计数
- android - Android MulticastSocket 隐式关闭
- java - 为什么 java 的 orElse 块总是被执行?
- angular - 路由url在角度发生变化时如何刷新页面