zoukankan      html  css  js  c++  java
  • 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)

    执行结果:

  • 相关阅读:
    leetcode 890. 查找和替换模式 Python
    TensorFlow-GPU+cuda8+cudnn6+anaconda安装遇到的版本错误
    leetcode 921. 使括号有效的最少添加(Python)
    BFC概念详解及应用
    做一个网页阅读百分比指示器
    margin-bottom和vertical-align的区别
    MD5算法
    Array.prototype.slice.call()方法详解
    String stringbuffer StringBuilder
    价值观
  • 原文地址:https://www.cnblogs.com/feiquan/p/11217534.html
Copyright © 2011-2022 走看看