微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试格式化时间和日期时,“模块 'babel' 没有属性 'dates'” 您可以使用 Python 中的 datetime 模块

如何解决尝试格式化时间和日期时,“模块 'babel' 没有属性 'dates'” 您可以使用 Python 中的 datetime 模块

我编写了这个函数,用 Babel 在我的 Flask 应用程序中格式化时间和日期:

import babel
from flask import Flask

app = Flask(__name__)

def format_datetime(value,format='medium'):
    if format == 'full':
        format = "EEEE MMMM,d,y 'at' h:mma"
    elif format == 'medium':
        format = "EE MM,dd,y h:mma"

    print(format)    
    return babel.dates.format_datetime(date,format)

app.jinja_env.filters['datetime'] = format_datetime

strTime = '2021-01-07 12:13:07'
print(format_datetime(strTime))

但是当我运行它时它会引发这个异常:

 Traceback (most recent call last):   
    File "C:\Users\user\Desktop\timedateTest\timepy.py",line 26,in <module>
     print(format_datetime(strTime))   
    File "C:\Users\user\Desktop\timedateTest\timepy.py",line 18,in format_datetime
     return babel.dates.format_datetime(date,format) AttributeError: module 'babel' has no attribute 'dates'

我做错了什么?

解决方法

尝试改变:

import babel

到:

from babel.dates import format_date,format_datetime,format_time
,

您可以使用 Python 中的 datetime 模块。

import datetime

def format_datetime(value,format='medium'):

    # Create a python date object to work on
    date_obj = datetime.datetime.strptime(value,'%Y-%m-%d %H:%M:%S')
    if format == 'full':
        return date_obj.strftime("%m/%d/%Y,%H:%M:%S")
    elif format == 'medium':
        return date_obj.strftime("%d-%b-%Y,%H:%M:%S")

strTime = '2021-01-07 12:13:07'

返回的格式

# output for format full
'07-January-2021,12:13:07'

# output for format medium
'07-Jan-2021,12:13:07'

您可以使用字符串作为 date_obj.strftime() 方法的参数插入任何类型的格式。

日期格式可以在 here 中找到以供参考。

,

阅读 http://babel.pocoo.org/en/latest/api/dates.html 处的文档后,我怀疑不允许将字符串传递到 babel.dates.format_datetime 中,因为该函数需要一个日期时间:

babel.dates.format_datetime(datetime=None,format='medium',tzinfo=None,locale=default_locale('LC_TIME'))
  • datetime – 日期时间对象;如果没有,则使用当前日期和时间
  • 格式——“完整”、“长”、“中”或“短”之一,或自定义日期/时间模式
  • tzinfo – 应用于显示时间的时区
  • locale – Locale 对象或区域设置标识符

另外,正如 John Gardonis 提到的,使用直接引用可能会有所帮助。 当您为自己定义自己的 format_datetime 函数时,我的建议是:

from babel.dates import format_datetime as babel_format_datetime

然后在你的函数中替换这一行:

return babel.dates.format_datetime(date,format)

与:

return babel_format_datetime(date,format)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。