星星飞 发表于 2021-8-13 22:09:37

把时间格式化成一个字符串中,加中文或英文会报错,但是加符号不会报错,这是为什么!

把时间格式化成一个字符串中,加中文或英文会报错,但是加符号不会报错,这是为什么?
from datetime import datetime
t = datetime.now() #拿取 此刻的时间
print(t)# 此刻的时间值 >>>2021-08-13 22:02:07.605720
print(t.strftime("%Y年%m月%d日 %H小时%M分钟%S秒")) # 这样加了中文或英文会报错>>>UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: encoding error


#但是下面的俩行代码就不会报错,我想问一下这是为什么?
print(t.strftime("%Y-%m-%d %H:%M:%S")) # >>>2021-08-13 22:02:53
print(t.strftime("%Y/%m/%d %H:%M:%S")) #>>>2021/08/13 22:03:29







麻烦了!!!

kogawananari 发表于 2021-8-13 22:49:53

python版本低了3.8以下会这样

kogawananari 发表于 2021-8-13 22:53:32

试试

format(t,"%Y年%m月%d日 %H小时%M分钟%S秒")

f'{t:%Y年%m月%d日 %H小时%M分钟%S秒}'

阿奇_o 发表于 2021-8-13 22:54:54

cmd环境下的编码问题,IDLE的shell里没有这个问题。

解决:
n.strftime("%Y{y}%m{m}%d{d}").format(y='年', m='月', d='日')
或         
n.strftime("%Y{}%m{}%d{}").format('年', '月', '日')

星星飞 发表于 2021-8-14 08:58:00

kogawananari 发表于 2021-8-13 22:49
python版本低了3.8以下会这样

我用的是3.7.0   我用pycharm编辑器,就会报错。但是在Python里的IDLE里编辑执行正常。

星星飞 发表于 2021-8-14 09:07:23

阿奇_o 发表于 2021-8-13 22:54
cmd环境下的编码问题,IDLE的shell里没有这个问题。

解决:

谢谢大兄弟!!!你的方法可行!!!
感谢!!!

星星飞 发表于 2021-8-14 10:36:53

阿奇_o 发表于 2021-8-13 22:54
cmd环境下的编码问题,IDLE的shell里没有这个问题。

解决:

大兄弟!!你知道为什么会在cdm环境下会报错不???

kogawananari 发表于 2021-8-14 11:37:45

星星飞 发表于 2021-8-14 08:58
我用的是3.7.0   我用pycharm编辑器,就会报错。但是在Python里的IDLE里编辑执行正常。

我以前实测3.7 time.strftime中文报错 3.8就好了不用from datatime 就直接time模块就报错

类似的还有calendar.LocaleTextCalendar 日历本地化 3.8中文报错 3.9修复
{:10_292:}

阿奇_o 发表于 2021-8-14 16:13:05

kogawananari 发表于 2021-8-14 11:37
我以前实测3.7 time.strftime中文报错 3.8就好了不用from datatime 就直接time模块就报错

类似的还 ...

日期时间的格式字符串报错,其实是因为调用了默认的C语言的字符处理函数,它在默认locale的编码环境下是按单字节来读取的(好像是ASCII),中文是双字节的,于是就报那错locale无法编译encode的错误。

(不升Python版本的话)比较通用的解决办法:可以直接临时修改locale配置,比如 在 程序(线程)开始时,设置一下
import locale
locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8')

这样设置,可以不单单解决中文时间格式字符串的问题,其他和 locale相关的日期、日历,地址格式,数字标点格式,打印等等,都会按按这个新配置的"语言_地区.字符编码"的各项标准来。

注:多线程的程序,为了"线程安全",或许还需要把locale设置回原来的(或写一个"上下文管理器"设置回原来的locale)
页: [1]
查看完整版本: 把时间格式化成一个字符串中,加中文或英文会报错,但是加符号不会报错,这是为什么!