Saya telah menulis fungsi ini untuk memformat waktu dan tanggal di aplikasi Flask saya dengan 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))

Tetapi ketika saya menjalankan ini, itu menimbulkan pengecualian ini:

 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'

Apa yang saya lakukan salah?

1
TheTruth 7 Januari 2021, 14:27

3 jawaban

Jawaban Terbaik

Coba ubah:

import babel

Untuk:

from babel.dates import format_date, format_datetime, format_time
3
John Gardounis 7 Januari 2021, 11:37

Anda dapat menggunakan modul datetime dengan python.

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'

Format yang dikembalikan

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

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

Anda dapat memasang format apa pun menggunakan string sebagai parameter untuk metode date_obj.strftime().

Format tanggal dapat ditemukan di sini untuk referensi.

2
Amit Pathak 7 Januari 2021, 11:41

Setelah membaca dokumentasi di http://babel.pocoo.org/en/latest /api/dates.html Saya menduga bahwa melewatkan string ke babel.dates.format_datetime tidak diperbolehkan karena fungsi ini mengharapkan datetime:

babel.dates.format_datetime(datetime=None, format='medium', tzinfo=None, locale=default_locale('LC_TIME'))
  • datetime – objek datetime; jika Tidak Ada, tanggal dan waktu saat ini digunakan
  • format – salah satu dari “penuh”, “panjang”, “sedang”, atau “pendek”, atau pola tanggal/waktu khusus
  • tzinfo – zona waktu untuk diterapkan pada waktu tampilan
  • locale – objek Lokal atau pengidentifikasi lokal

Juga seperti yang disebutkan John Gardounis menggunakan referensi langsung mungkin bisa membantu. Saat Anda mendefinisikan fungsi format_datetime Anda sendiri, saran saya adalah:

from babel.dates import format_datetime as babel_format_datetime

Kemudian ganti baris ini di fungsi Anda:

return babel.dates.format_datetime(date, format)

Dengan:

return babel_format_datetime(date, format)
1
Knut Boehnert 7 Januari 2021, 11:42