鱼C论坛

 找回密码
 立即注册
查看: 1246|回复: 8

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

[复制链接]
发表于 2021-8-13 22:09:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


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



复制代码




麻烦了!!!
最佳答案
2021-8-13 22:54:54
cmd环境下的编码问题,IDLE的shell里没有这个问题。

解决:
  1. n.strftime("%Y{y}%m{m}%d{d}").format(y='年', m='月', d='日')
  2. 或         
  3. n.strftime("%Y{}%m{}%d{}").format('年', '月', '日')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-13 22:49:53 | 显示全部楼层
python版本低了  3.8以下会这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 22:53:32 | 显示全部楼层
试试

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

f'{t:%Y年%m月%d日 %H小时%M分钟%S秒}'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 22:54:54 | 显示全部楼层    本楼为最佳答案   
cmd环境下的编码问题,IDLE的shell里没有这个问题。

解决:
  1. n.strftime("%Y{y}%m{m}%d{d}").format(y='年', m='月', d='日')
  2. 或         
  3. n.strftime("%Y{}%m{}%d{}").format('年', '月', '日')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-14 08:58:00 | 显示全部楼层
kogawananari 发表于 2021-8-13 22:49
python版本低了  3.8以下会这样

我用的是3.7.0   我用pycharm编辑器,就会报错。但是在Python里的IDLE里编辑执行正常。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-14 09:07:23 | 显示全部楼层
阿奇_o 发表于 2021-8-13 22:54
cmd环境下的编码问题,IDLE的shell里没有这个问题。

解决:

谢谢大兄弟!!!你的方法可行!!!
感谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-14 10:36:53 | 显示全部楼层
阿奇_o 发表于 2021-8-13 22:54
cmd环境下的编码问题,IDLE的shell里没有这个问题。

解决:

大兄弟!!你知道为什么会在cdm环境下会报错不???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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修复

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 08:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表