tipe objek 'datetime.datetime' tidak memiliki atribut 'datetime'

127

Saya mendapatkan kesalahan berikut:

tipe objek 'datetime.datetime' tidak memiliki atribut 'datetime'

Di baris berikut:

date = datetime.datetime(int(year), int(month), 1)

Apakah ada yang tahu alasan kesalahannya?

Saya mengimpor datetime dengan from datetime import datetime jika itu membantu

Terima kasih

Chris Frank
sumber

Jawaban:

225

Datetime adalah modul yang memungkinkan penanganan tanggal, waktu, dan waktu (semuanya adalah tipe data). Artinya itudatetime modul tingkat atas sekaligus tipe di dalam modul itu. Ini membingungkan.

Kesalahan Anda mungkin didasarkan pada penamaan modul yang membingungkan, dan apa yang Anda atau modul yang Anda gunakan telah diimpor.

>>> import datetime
>>> datetime
<module 'datetime' from '/usr/lib/python2.6/lib-dynload/datetime.so'>
>>> datetime.datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)

Tetapi, jika Anda mengimpor datetime.datetime:

>>> from datetime import datetime
>>> datetime
<type 'datetime.datetime'>
>>> datetime.datetime(2001,5,1) # You shouldn't expect this to work 
                                # as you imported the type, not the module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
>>> datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)

Saya menduga Anda atau salah satu modul yang Anda gunakan telah diimpor seperti ini: from datetime import datetime.

John Lyon
sumber
3
@jozzas jawaban yang bagus. Saya punya masalah dengan timedelta yang diselesaikan dengan solusi Anda. Txs.
Luis Miguel
1
@Jean ini adalah kesalahan datetime yang membayangi nama modulnya sendiri dengan salah satu nama kelasnya, bukan python.
Robino
85

Untuk python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)
RouR
sumber
12
+1. Saya pikir ini harus menjadi jawaban yang benar karena sejauh yang saya tahu, import datetimeselalu menyebabkan masalah, jadi saya mendukung solusi yang menggunakanfrom datetime import datetime
jeff
14

Kamu harus menggunakan

date = datetime(int(year), int(month), 1)

Atau ubah

from datetime import datetime

untuk

import datetime
waitingkuo
sumber
11

Anda harus benar-benar mengimpor modul ke dalam aliasnya sendiri .

import datetime as dt
my_datetime = dt.datetime(year, month, day)

Di atas memiliki keunggulan berikut dibandingkan solusi lainnya:

  • Memanggil variabel my_datetimealih-alih datemengurangi kebingungan karena sudah ada datedi modul datetime ( datetime.date).
  • Modul dan kelas (keduanya disebut datetime) tidak saling membayangi.
Robino
sumber
1

Jika Anda pernah menggunakan:

from datetime import datetime

Kemudian cukup tulis kodenya sebagai:

date = datetime(int(year), int(month), 1)

Tetapi jika Anda telah menggunakan:

import datetime

maka hanya Anda yang bisa menulis:

date = datetime.datetime(int(2005), int(5), 1)
M. Paul
sumber
1

Saya menemukan ini jauh lebih mudah

from dateutil import relativedelta
relativedelta.relativedelta(end_time,start_time).seconds
Kamaldeep Singh
sumber
1

Saya mengalami kesalahan yang sama mungkin Anda sudah mengimpor modul dengan hanya menggunakan import datetimejadi ubah form datetime import datetimeke saja import datetime. Ini berhasil untuk saya setelah saya mengubahnya kembali.

Audrey Mengue
sumber
-2
from datetime import datetime
import time
from calendar import timegm
d = datetime.utcnow()
d = d.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
utc_time = time.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
epoch_time = timegm(utc_time)
Jay Agrawal
sumber
6
Cobalah untuk menghindari jawaban hanya kode. Anda dapat mengedit posting Anda untuk menambahkan beberapa penjelasan dan link untuk mendukung kode Anda.
Tomerikoo