Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dateformat与葡萄牙语格式区域设置不匹配_Python_Datetime_Locale - Fatal编程技术网

Python dateformat与葡萄牙语格式区域设置不匹配

Python dateformat与葡萄牙语格式区域设置不匹配,python,datetime,locale,Python,Datetime,Locale,我正在尝试将葡萄牙语日期解析为datetime。下面是我正在尝试的: import locale from datetime import datetime locale.setlocale(locale.LC_ALL, 'pt_PT.iso88591') date_format = '%A, %d %B %Y, %H:%M' date_str = 'sexta-feira, 8 de setembro de 2017, 20:08' datetime.strptime(date_str, da

我正在尝试将葡萄牙语日期解析为datetime。下面是我正在尝试的:

import locale
from datetime import datetime
locale.setlocale(locale.LC_ALL, 'pt_PT.iso88591')
date_format = '%A, %d %B %Y, %H:%M'
date_str = 'sexta-feira, 8 de setembro de 2017, 20:08'
datetime.strptime(date_str, date_format)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/_strptime.py", line 332, in _strptime
    (data_string, format))
ValueError: time data 'sexta-feira, 8 de setembro de 2017, 20:08' does not 
  match format '%A, %d %B %Y, %H:%M'

我做错了什么?

您可以使用
strftime
方法轻松测试反向转换。对于您的示例,它看起来是这样的(很明显,为什么您的
strtime
不起作用):


POSIX日期和时间格式对不同日期格式的支持有限。我建议你看看PyICU:

from datetime import datetime
from icu import Locale, DateFormat, ICUtzinfo, TimeZone
locale = Locale('pt_PT')
tz = ICUtzinfo.getInstance('Portugal')
now = datetime.now(tz)
df = DateFormat.createDateTimeInstance(DateFormat.kFull, DateFormat.kFull, locale)
s = df.format(now)
print s
now2 = df.parse(s)
print now2
s2 = df.format(now2)
print s2
输出:

sexta-feira, 8 de setembro de 2017 às 23:26:20 Hora de verão da Europa Central
1504905980.0
sexta-feira, 8 de setembro de 2017 às 23:26:20 Hora de verão da Europa Central
我正在抓取一个网站,所以我需要将一个日期字符串(sexta feira,8 de setembro de 2017,20:08)转换为datetime,以便将其保存到数据库中。我该如何使用PyICU

这需要自定义CLDR模式:

df = SimpleDateFormat("EEEE, d 'de' MMMM 'de' yyy, HH:mm", locale)
print df.parse('sexta-feira, 8 de setembro de 2017, 20:08')

嗯,我正在抓取一个网站,所以我需要将一个日期字符串(sexta feira,8 de setembro de 2017,20:08)转换为datetime,以便将其保存到数据库中。我该如何使用PyICU?为什么它“非常明显”?我看到的唯一区别是填充零和大写。除非你是说“萨巴多”(星期六)和“塞克斯塔·费拉”(星期五)?他的例子“sexta feira,8 setembro 2017,20:08”与你的产出相匹配,除了资本化和前导零(以及不同的日期)。我所说的“非常明显”,意味着通过交叉引用这两种转换很容易找到真正的担忧。我用调试这个问题的方法回答了这个问题,给出的示例正好说明了这一点。但是为了让它更明显:
strtime
strftime
不知道什么是“sexta feira”,他们只知道“sexta”。
sexta-feira, 8 de setembro de 2017 às 23:26:20 Hora de verão da Europa Central
1504905980.0
sexta-feira, 8 de setembro de 2017 às 23:26:20 Hora de verão da Europa Central
df = SimpleDateFormat("EEEE, d 'de' MMMM 'de' yyy, HH:mm", locale)
print df.parse('sexta-feira, 8 de setembro de 2017, 20:08')