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

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

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))

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

解决方法:

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

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'))

执行结果:

  

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

import time,locale
timestr="2020-10-10 10:10:10"
t=time.strptime(timestr,"%Y-%m-%d %H:%M:%S")
locale.setlocale(locale.LC_CTYPE,'chinese')
print(time.strftime("%Y年%m月%d日 %H时%M分%S秒",t))

执行结果:

  

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

复制代码
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)
复制代码

执行结果:

 

posted @   feiquan  阅读(3792)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
如果是此文是转载文章,本人会附上转载链接,此篇文章的版权归原创作者所属,如果侵权请与我联系,我会删除此文。

若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)
点击右上角即可分享
微信分享提示