python中time.strftime不支持中文

python中time.strftime不支持中文,报错UnicodeEncodeError: ‘locale’ codec can’t encode character ‘\u5e74’ in position 2: encoding error

QQ群:397745473

参考原文:https://www.cnblogs.com/feiquan/p/11217534.html

使用time.strftime将 “2020-10-10 10:10:10” 转化为 2020年10月10日10时10分10 报错:

1
2
3
4
import time
timestr="2020-10-10 10:10:10"
t=time.strptime(timestr,"%Y-%m-%d %H:%M:%S")
print(time.strftime("%Y年%m月%d日 %H时%M分%S秒",t))

img

根据错误可以看出,没有执行成功的原因是”%Y年%m月%d日 %H时%M分%S秒”中包含了中文,中文没有转化为unicode编码失败的。

解决方法:

方法一:先转为uncode编码执行,执行完后转为utf-8显示

1
2
3
4
import time
timestr="2020-10-10 10:10:10"
t=time.strptime(timestr,"%Y-%m-%d %H:%M:%S")
print(time.strftime("%Y年%m月%d日 %H时%M分%S秒".encode('unicode_escape').decode('utf8'),t).encode('utf-8').decode('unicode_escape'))

执行结果:

  img

方法二:修改语言符号 详情

执行结果:

  img

方法三:重写一个自定义转化函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def change_time(timeStr:str,t_int=False)->str:
import re
t_text = ['年', '月', '日 ', '时', '分', '秒']
re_t = re.compile("[\d|\.]+")
str_time = ''
for k, v in zip(t_text, re_t.findall(timeStr)):
if t_int and '.' in v :
v=re.sub('\.\d+', '', v)
str_time += str(v) + k
return str_time

if __name__ == '__main__':
print(datetime.now())
t=change_time(str(datetime.now()))
int_t=change_time(t,True)
float_t=change_time(t)
print(int_t)
print(float_t)

执行结果:

img

QQ群:397745473

知识星球