"module 'babel' has no attribute 'dates'" 尝试格式化时间和日期时
"module 'babel' has no attribute 'dates'" when trying to format time and date
我写了这个函数来格式化我的 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'
我做错了什么?
尝试更改:
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 – 日期时间对象;如果 None,则使用当前日期和时间
- 格式 – “全”、“长”、“中”或“短”之一,或自定义 date/time 模式
- 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)
我写了这个函数来格式化我的 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'
我做错了什么?
尝试更改:
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 – 日期时间对象;如果 None,则使用当前日期和时间
- 格式 – “全”、“长”、“中”或“短”之一,或自定义 date/time 模式
- 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)