素材牛VIP会员
关于python处理中文时间的问题
 轰***o  分类:Python  人气:865  回帖:3  发布于6年前 收藏
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from datetime import datetime
nt=datetime.now()
print(nt.strftime('%Y年%m月%d日 %H时%M分%S秒'))

为何里面不能使用中文?用英文字符没事,但是只要用中文就报错

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    print(nt.strftime('%Y年%m月%d日 %H时%M分%S秒'))
UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2
: Illegal byte sequence

网上找遍了,关于python的格式化时间的使用,全部用的英文格式,就没人用中文?

 标签:python

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv2 入门
Br***23 产品经理 6年前#1

print(nt.strftime('%Y年%m月%d日 %H时%M分%S秒').decode('utf-8'))#正常输出2015年08月10日 11时25分04秒

Lv4 码徒
风***0 JS工程师 6年前#2

只能说题主找的还不够功夫。

这是Google第一面的两个结果,这两个结果分别代表了一个解决办法。

下面进入正题:

第一种解决方法

python>>> import locale
>>> locale.setlocale(locale.LC_CTYPE, 'chinese')
>>> print(nt.strftime('%Y年%m月%d日'))
2015年08月10日

原理是:“在Windows里,time.strftime使用C运行时的多字节字符串函数strftime,这个函数必须先根据当前locale配置来编码格式化字符串(使用PyUnicode_EncodeLocale)。”如果不设置好locale的话,根据默认的"C" locale,底层的wcstombs函数会使用latin-1编码(单字节编码)来编码格式化字符串,然后导致题主提供的多字节编码的字符串在编码时出错。

第二种解决办法

pythonprint(nt.strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日'))

原理是:既然直接丢中文字符进去会出错,那么就绕过这个问题,丢(可能)永远不会出错的ascii字符进去充当占位符,格式化完毕后再将占位符换回中文字符。

另外强调一下,不弄清楚版本就回答问题的全是耍流氓。

Lv6 码匠
hx***lf JAVA开发工程师 6年前#3

看楼主的错误提示,应该是编码问题导致里面的几个中文字符出错吧,楼主的使用格式是没问题的。额,还有一点刚刚发现,楼主的是python3?我的是2.7.9,不知道time和datetime模块调用方式会不会有差异。不过根据错误提示,还是先排查一下编码问题吧!

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取