我需要转换
14Şubat2015Cumartesi,09:47:49
到日期时间。当我打印这个日期它工作正常但我无法改变time.strptime
内部的编码,无论我尝试编码或解码到不同的类型。这是我的代码
# -*- coding: cp1254 -*-
import chardet
import time
from time import mktime
import datetime
h="14 Şubat 2015 Cumartesi, 09:47:49"
kc= datetime.datetime.fromtimestamp(mktime(time.strptime(h.decode('utf-8), "%d %B %Y %A,%H:%M:%S") ))
print kc
print chardet.detect(h)结果是
{'confidence': 0.748485181144929, 'encoding': 'ISO-8859-2'}
答案 0 :(得分:1)
h应该是一个unicode字符串:
h=u"14 Şubat 2015 Cumartesi, 09:47:49"
我认为您需要将行更改为:
kc= datetime.datetime.fromtimestamp(mktime(time.strptime(h.encode('utf-8'), "%d %B %Y %A,%H:%M:%S") ))
(不能验证,因为我不知道该地区,我因此而得到错误)
确保您的区域设置设置为标识Şubat
和Cumartesi
使用:
import locale
locale.setlocale(locale.LC_ALL, <your locale>)
答案 1 :(得分:1)
假设您尝试使用土耳其语日期的字符串表示创建datetime
对象。
您需要做的第一件事就是将文件的源代码编码从cp1254
更改为utf-8
,这基本上涵盖了更广泛的字符集。
# -*- coding: utf-8 -*-
其次,您应该将语言环境设置为tr_TR
,以便Python了解Şubat
在创建日期对象时的含义。
import locale
locale.setlocale(locale.LC_ALL, "tr_TR")
然后,您可以执行以下操作将日期字符串转换为实际的datetime.datetime
对象。
import datetime
str_date = '14 Şubat 2015 Cumartesi, 09:47:49'
date_obj = datetime.datetime.strptime(str_date, "%d %B %Y %A, %H:%M:%S")
print date_obj
# will print datetime.datetime(2015, 2, 14, 9, 47, 49)
希望这有帮助。
答案 2 :(得分:1)
找到这个解决方案很痛苦。这是一个Windows解决方案。从您的帖子中不清楚您使用的操作系统。学习:
trk
或turkish
。 https://msdn.microsoft.com/en-us/library/39cwe7zf(v=vs.90).aspx cp1254
。 getlocale()
表示正确的编码。 https://docs.python.org/2/library/datetime.html(底部注1)。strptime
中有一个错误,它不接受Şubat,但会接受şubat。在处理之前,解决方案是.lower()
字符串。 Python 2和3也有几个月的大写版本的问题。以下是.lower()
解决方法的解决方案。我专门使用utf-8
的源编码来明确表示strptime
使用的字符串必须采用正确的cp1254
编码。
# coding: utf8
import locale
import datetime
locale.setlocale(locale.LC_ALL,'turkish')
print(locale.getlocale())
h = u"14 Şubat 2015 Cumartesi, 09:47:49"
kc = datetime.datetime.strptime(h.lower().encode('cp1254'), '%d %B %Y %A, %H:%M:%S')
print kc
输出:
('Turkish_Turkey', '1254')
2015-02-14 09:47:49
Python 3默认使用Unicode来使事情更简单,加上Şubat的案例问题得到解决。
# coding: utf8
import locale
import datetime
locale.setlocale(locale.LC_ALL,'turkish')
print(locale.getlocale())
h = '14 Şubat 2015 Cumartesi, 09:47:49'
kc = datetime.datetime.strptime(h, '%d %B %Y %A, %H:%M:%S')
print(kc)
输出:
('Turkish_Turkey', '1254')
2015-02-14 09:47:49