【问题标题】:"module 'babel' has no attribute 'dates'" when trying to format time and date尝试格式化时间和日期时,“模块‘babel’没有属性‘日期’”
【发布时间】:2021-01-07 11:27:26
【问题描述】:

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

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'

我做错了什么?

【问题讨论】:

标签: python python-3.x python-babel


【解决方案1】:

尝试改变:

import babel

到:

from babel.dates import format_date, format_datetime, format_time

【讨论】:

  • 收到此异常 AttributeError: 'NoneType' object has no attribute 'days'
  • 或者干脆from babel.dates import format_datetime,因为其他两个函数没有用到。
  • @TheTruth 如果解决了导入函数相关的问题,现在又出现问题,请提出新问题(先自己研究新问题后)。
  • @TheTruth 我认为这是与您设置的默认语言环境有关的问题。看看这个问题stackoverflow.com/q/4838056/10895906 和你的类似
【解决方案2】:

您可以在 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

【讨论】:

  • 在一个空的新文件中运行代码会显示错误AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
【解决方案3】:

阅读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 Gardounis 提到的,使用直接引用可能会有所帮助。 当您为自己定义自己的 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)

【讨论】:

  • 问题不在于format_datetime 是如何使用,而在于它是如何导入
猜你喜欢
  • 2020-04-18
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多