Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 解决time.strTime(today.strftime(";%x";)和";%x";)在某些地区失败的问题_Python_Locale - Fatal编程技术网

Python 解决time.strTime(today.strftime(";%x";)和";%x";)在某些地区失败的问题

Python 解决time.strTime(today.strftime(";%x";)和";%x";)在某些地区失败的问题,python,locale,Python,Locale,试图在文本gui小部件中显示本地化的日期字符串。我目前采用的方法是将带有datetime.datetime.strftime(“%x”)的本地化字符串显示到文本小部件中,以便用户可以对其进行编辑。然后我尝试用time.strtime(“x”)解析字符串 当前的问题是,对于某些地区(或_IN,ja_JP.UTF-8,ko_ko.UTF-8),time.strtime(“x”)无法解析由datetime.datetime.strftime(“%x”)生成的格式。 它总是在试图解析此内容时抛出Valu

试图在文本gui小部件中显示本地化的日期字符串。我目前采用的方法是将带有datetime.datetime.strftime(“%x”)的本地化字符串显示到文本小部件中,以便用户可以对其进行编辑。然后我尝试用time.strtime(“x”)解析字符串

当前的问题是,对于某些地区(或_IN,ja_JP.UTF-8,ko_ko.UTF-8),time.strtime(“x”)无法解析由datetime.datetime.strftime(“%x”)生成的格式。 它总是在试图解析此内容时抛出ValueError

我怀疑这是在日期格式中使用双字节分隔符的strtime和date字符串的问题。这也可能是因为%x对strftime和strptime的含义不同(如果我理解正确,一个基本上只是glibc实现,而另一个是特定于python的)

我正在寻找一种更好的方法来处理本地化的日期字符串,以便可以在ui中编辑它们

#!/usr/bin/python


# We are trying to present a localized date in a text widget, so
# that a user could potentially edit it, and then we try to
# parse it with datetime.strptime

# however, even if the user doesn't edit the date produced
# by today.strftime("%x"), time.strptime(DATE, "%x") fails
# to parse it

# Not sure what's going on there before. I've seen this once
# before with in_OR, and that turned out to be a locale bug
# in glibc. This could also be the case, so what I'm looking
# for is a more robust approach to this problem that will
# work on all locales

# platform: fedora 14, x86_64
# Python 2.7 (r27:82500, Sep 16 2010, 18:02:00) 
# [GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2

import datetime
import time
import locale

today = datetime.date.today()

# works for "C"
locale.setlocale(locale.LC_ALL, 'C')
print time.strptime(today.strftime("%x"), "%x")

# works for en_us.utf8
locale.setlocale(locale.LC_ALL, 'en_US.utf8')
print time.strptime(today.strftime("%x"), "%x")


# fails for 'ja_JP.UTF-8'
loc = 'ja_JP.UTF-8'
locale.setlocale(locale.LC_ALL,loc)
try:
    print today.strftime("%x")
    print time.strptime(today.strftime("%x"), "%x")
except ValueError:
    print "failed for %s" % loc


loc = 'ko_KR.UTF-8'
locale.setlocale(locale.LC_ALL,loc)
try:
    print today.strftime("%x")
    print time.strptime(today.strftime("%x"), "%x")
except ValueError:
    print "failed for %s" % loc
以及我的系统(fedora 14,x86_64)上此测试程序的示例输出:


检查您是否在locale\u alias字典中有您的语言环境

>>> import locale
>>> len(locale.locale_alias)
843
>>> locale.locale_alias.keys()[:10]
['ko_kr.euc', 'is_is', 'ja_jp.mscode', 'kw_gb@euro', 'yi_us.cp1255', 'ca_es@euro', 'ja_jp.ujis', 'ar_ma', 'greek.iso88597', 'sr_yu.iso88592']
>>>

检查您是否在locale\u alias字典中有您的语言环境

>>> import locale
>>> len(locale.locale_alias)
843
>>> locale.locale_alias.keys()[:10]
['ko_kr.euc', 'is_is', 'ja_jp.mscode', 'kw_gb@euro', 'yi_us.cp1255', 'ca_es@euro', 'ja_jp.ujis', 'ar_ma', 'greek.iso88597', 'sr_yu.iso88592']
>>>

使用工具箱的日期小部件而不是文本小部件。所有主要工具包都有一个日期小部件,它可以正常工作,并且比任何日期表示的文本字段更容易编辑。

使用工具包的日期小部件而不是文本小部件。所有主要工具包都有一个日期小部件,它可以正常工作,并且比任何日期表示的文本字段更易于编辑。

最终,只需将日期的文本条目更改为使用iso日期格式,ala: 2013-12-31. 这在一个可爱的本地化用户界面中有点不和谐,但唉

在这种情况下,本机工具包没有提供基于文本的日期 条目和使用场景使得搜索未来遥远的日期变得很常见 (这意味着在gui日历小部件中要点击几十次)

这个问题的其他类似变化也导致了这种变化。对于一些地区, 特别是使用日期格式的地区,其月份标题将从 如果将单个glyph转换为两个字符的名称,则内置的python strTime甚至会失败 使用正确的区域设置和其他格式正确的字符串。奖金 更糟糕的是,在某些地区,只有当月份>10时,它才会失败,所以它会失败 除了11月/12月,其他地区的工作时间都是glibc strtime
失败。这两种情况的文件缺陷都存在于上游。

最终,只是将日期的文本条目更改为使用iso日期格式,ala: 2013-12-31. 这在一个可爱的本地化用户界面中有点不和谐,但唉

在这种情况下,本机工具包没有提供基于文本的日期 条目和使用场景使得搜索未来遥远的日期变得很常见 (这意味着在gui日历小部件中要点击几十次)

这个问题的其他类似变化也导致了这种变化。对于一些地区, 特别是使用日期格式的地区,其月份标题将从 如果将单个glyph转换为两个字符的名称,则内置的python strTime甚至会失败 使用正确的区域设置和其他格式正确的字符串。奖金 更糟糕的是,在某些地区,只有当月份>10时,它才会失败,所以它会失败 除了11月/12月,其他地区的工作时间都是glibc strtime
失败。这两种情况的文件错误都存在于上游。

ja_jp/ko_kr似乎在那里(以及locale.locale_编码_别名中的UTF8)。但我不确定这意味着什么。locale似乎设置正确,LC_*似乎正确,strftime(“%x”)似乎做了正确的事情(好吧,似乎做了正确的事情,它匹配“LANG=ja_JP.UTF-8 date'+%x'”的输出,例如.ja_JP/ko_kr似乎在那里(而UTF8在locale.locale_编码_别名中)。我不确定这里的含义是什么。区域设置似乎设置正确,LC_*似乎正确,strftime(“%x”)似乎做了正确的事情(嗯,似乎做了正确的事情,它与“LANG=ja_JP.UTF-8 date'+%x'的输出匹配)。