Konversi antara datetime, Timestamp dan datetime64

290

Bagaimana cara mengonversi numpy.datetime64objek ke datetime.datetime(atau Timestamp)?

Dalam kode berikut, saya membuat objek datetime, timestamp dan datetime64.

import datetime
import numpy as np
import pandas as pd
dt = datetime.datetime(2012, 5, 1)
# A strange way to extract a Timestamp object, there's surely a better way?
ts = pd.DatetimeIndex([dt])[0]
dt64 = np.datetime64(dt)

In [7]: dt
Out[7]: datetime.datetime(2012, 5, 1, 0, 0)

In [8]: ts
Out[8]: <Timestamp: 2012-05-01 00:00:00>

In [9]: dt64
Out[9]: numpy.datetime64('2012-05-01T01:00:00.000000+0100')

Catatan: mudah untuk mendapatkan datetime dari Timestamp:

In [10]: ts.to_datetime()
Out[10]: datetime.datetime(2012, 5, 1, 0, 0)

Tetapi bagaimana kita mengekstrak datetimeatau Timestampdari numpy.datetime64( dt64)?

.

Pembaruan: contoh yang agak buruk dalam dataset saya (mungkin contoh yang memotivasi) tampaknya:

dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100')

yang seharusnya datetime.datetime(2002, 6, 28, 1, 0), dan tidak lama (!) ( 1025222400000000000L) ...

Andy Hayden
sumber
2
Anda mungkin harus menerima jawaban @Wes McKinney yang jauh lebih pendek dan harus bekerja pada baru-baru ini numpy, pandasversi.
jfs
@ JFSebastian Hmmm, apakah itu artinya jawabannya adalah "jangan berpindah dari np.datetime ke datetime" ... cukup gunakan pd.Timestamp (karena ini adalah subclass dari datetime), atau jika Anda benar-benar harus menggunakan pd.Timestamp(dt64).to_datetime(). Saya masih sedikit tidak puas tentang ini, tetapi tentu saja Wes kurang spesifik untuk masalah lama saya (dan jadi lebih baik untuk dunia)! Sekali lagi terima kasih telah meluangkan waktu untuk menjawabnya. :)
Andy Hayden
Pertanyaan Anda mengatakan "atau Timestamp" dan Timestampapakah datetime(subkelas) :)
jfs
3
Bagi mereka yang datang ke pertanyaan ini di 2017+, lihat jawaban saya di bawah ini untuk tutorial terperinci tentang datetime, datetime64 dan Timestamps: stackoverflow.com/a/46921593/3707607
Ted Petrou

Jawaban:

132

Untuk mengkonversi numpy.datetime64ke objek datetime yang mewakili waktu dalam UTC pada numpy-1.8:

>>> from datetime import datetime
>>> import numpy as np
>>> dt = datetime.utcnow()
>>> dt
datetime.datetime(2012, 12, 4, 19, 51, 25, 362455)
>>> dt64 = np.datetime64(dt)
>>> ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's')
>>> ts
1354650685.3624549
>>> datetime.utcfromtimestamp(ts)
datetime.datetime(2012, 12, 4, 19, 51, 25, 362455)
>>> np.__version__
'1.8.0.dev-7b75899'

Contoh di atas mengasumsikan bahwa objek datetime naif ditafsirkan np.datetime64sebagai waktu dalam UTC.


Untuk mengonversi datetime ke np.datetime64 dan kembali ( numpy-1.6):

>>> np.datetime64(datetime.utcnow()).astype(datetime)
datetime.datetime(2012, 12, 4, 13, 34, 52, 827542)

Ia bekerja baik pada objek np.datetime64 tunggal dan array np.datetime64.

Pikirkan np.datetime64 dengan cara yang sama dengan np.int8, np.int16, dll dan terapkan metode yang sama untuk mengkonversi antara objek Python seperti int, datetime, dan objek numpy yang sesuai.

"Contoh buruk" Anda berfungsi dengan benar:

>>> from datetime import datetime
>>> import numpy 
>>> numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime)
datetime.datetime(2002, 6, 28, 0, 0)
>>> numpy.__version__
'1.6.2' # current version available via pip install numpy

Saya dapat mereproduksi longnilai pada numpy-1.8.0diinstal sebagai:

pip install git+https://github.com/numpy/numpy.git#egg=numpy-dev

Contoh yang sama:

>>> from datetime import datetime
>>> import numpy
>>> numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime)
1025222400000000000L
>>> numpy.__version__
'1.8.0.dev-7b75899'

Ini mengembalikan longkarena untuk numpy.datetime64tipe .astype(datetime)sama dengan .astype(object)yang mengembalikan Python integer ( long) pada numpy-1.8.

Untuk mendapatkan objek datetime Anda bisa:

>>> dt64.dtype
dtype('<M8[ns]')
>>> ns = 1e-9 # number of seconds in a nanosecond
>>> datetime.utcfromtimestamp(dt64.astype(int) * ns)
datetime.datetime(2002, 6, 28, 0, 0)

Untuk mendapatkan datetime64 yang menggunakan detik secara langsung:

>>> dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100', 's')
>>> dt64.dtype
dtype('<M8[s]')
>>> datetime.utcfromtimestamp(dt64.astype(int))
datetime.datetime(2002, 6, 28, 0, 0)

The docs numpy mengatakan bahwa datetime API adalah eksperimental dan dapat berubah dalam versi numpy masa depan.

jfs
sumber
1
Saya khawatir ini sepertinya tidak selalu berhasil: misalnya dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100'), yang memberi waktu ( 1025222400000000000L) (!)
Andy Hayden
@hayden: coba type(dt64). dt64.astype(datetime) == datetime.utcfromtimestamp(dt64.astype(int)*1e-6)
jfs
@JFSebastian type(dt64)adalah numpy.datetime64dan dt64.astype(datetime)adalah int ... (s)
Andy Hayden
@ Hayden: Apa versi numpy Anda? Milik saya: numpy.__version__->'1.6.1'
jfs
Versi 1.8.0 (dalam python 2.7.3), jika itu berfungsi untuk Anda, ia menyarankan bug di sistem saya!
Andy Hayden
212

Anda cukup menggunakan konstruktor pd.Timestamp. Diagram berikut mungkin berguna untuk ini dan pertanyaan terkait.

Konversi antara representasi waktu

Bergalah
sumber
2
Bagus!!! (Layak disebutkan bahwa situasi telah membaik sejak saya menulis pertanyaan ini, banyak pekerjaan telah dilakukan di sini :))
Andy Hayden
107
Hanya dengan melihat diagram ini memberitahu saya ada sesuatu yang secara fundamental salah dengan semua hal waktu ini.
landak gila
4
Sangat membingungkan bahwa pd.to_datetime akan menghasilkan TimeStamp jika diberi jumlah ms atau ns, tetapi akan menghasilkan datetime.datetime jika diberi datetime.datetime atau np.datetime64 jika diberi np.datetime64 ... Mengapa ada yang mau pikir ini masuk akal?
Mr.WorshipMe
7
@ Mr.WorshipMe Diagram ini perlu diperbarui. pd.to_datetimemengubah segalanya menjadi pd.Timestamp. Sebuah pd.Timestampbenda memiliki metode to_pydatetimeuntuk kembali ke datetime.datetimeobjek dan to_datetime64metode untuk mengkonversi ke np.datetime64.
Ted Petrou
2
Bagaimana saya bisa mendapatkan resolusi yang lebih tinggi dari foto ini?
user3226167
137

Selamat Datang di neraka.

Anda bisa meneruskan objek datetime64 ke pandas.Timestamp:

In [16]: Timestamp(numpy.datetime64('2012-05-01T01:00:00.000000'))
Out[16]: <Timestamp: 2012-05-01 01:00:00>

Saya perhatikan bahwa ini tidak berfungsi dengan baik di NumPy 1.6.1:

numpy.datetime64('2012-05-01T01:00:00.000000+0100')

Juga, pandas.to_datetimedapat digunakan (ini off dari versi dev, belum dicentang v0.9.1):

In [24]: pandas.to_datetime('2012-05-01T01:00:00.000000+0100')
Out[24]: datetime.datetime(2012, 5, 1, 1, 0, tzinfo=tzoffset(None, 3600))
Wes McKinney
sumber
5
Anda harus menyebutkan bahwa issubclass(pd.Timestamp, datetime)adalah True. Dan Timestampkelas itu sendiri memiliki to_datetime()metode.
jfs
7
pd.to_datetime('2012-05-01T01:00:00.000000+0100')mengembalikan Timestamp('2012-05-01 00:00:00')setidaknya dalam panda 0.17.1.
Anton Protopopov
96

Saya pikir mungkin ada upaya yang lebih terkonsolidasi dalam jawaban untuk lebih menjelaskan hubungan antara modul datetime Python, datetime numpy64 / timedelta64 dan objek Timestamp / Timedelta panda.

Pustaka standar datetime dari Python

Pustaka standar datetime memiliki empat objek utama

  • waktu - hanya waktu, diukur dalam jam, menit, detik dan mikrodetik
  • tanggal - hanya tahun, bulan, dan hari
  • datetime - Semua komponen waktu dan tanggal
  • timedelta - Jumlah waktu dengan satuan hari maksimum

Buat empat objek ini

>>> import datetime
>>> datetime.time(hour=4, minute=3, second=10, microsecond=7199)
datetime.time(4, 3, 10, 7199)

>>> datetime.date(year=2017, month=10, day=24)
datetime.date(2017, 10, 24)

>>> datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 24, 4, 3, 10, 7199)

>>> datetime.timedelta(days=3, minutes = 55)
datetime.timedelta(3, 3300)

>>> # add timedelta to datetime
>>> datetime.timedelta(days=3, minutes = 55) + \
    datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 27, 4, 58, 10, 7199)

Objek datetime64 dan timedelta64 NumPy

NumPy tidak memiliki objek tanggal dan waktu yang terpisah, hanya objek datetime64 tunggal untuk mewakili satu momen dalam waktu. Objek datetime modul datetime memiliki presisi mikrodetik (sepersejuta detik). Objek datetime64 NumPy memungkinkan Anda untuk mengatur presisi dari jam sampai ke attoseconds (10 ^ -18). Konstruktornya lebih fleksibel dan dapat mengambil berbagai input.

Bangun objek datetime64 dan timedelta64 NumPy

Berikan bilangan bulat dengan string untuk unit. Lihat semua unit di sini . Itu akan dikonversi ke banyak unit setelah zaman UNIX: 1 Januari 1970

>>> np.datetime64(5, 'ns') 
numpy.datetime64('1970-01-01T00:00:00.000000005')

>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')

Anda juga dapat menggunakan string selama masih dalam format ISO 8601.

>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')

Timedeltas memiliki satu unit

>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours

Bisa juga membuatnya dengan mengurangi dua objek datetime64

>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')

Pandas Timestamp dan Timedelta membangun lebih banyak fungsi di atas NumPy

Sebuah cap waktu panda adalah momen dalam waktu yang sangat mirip dengan datetime tetapi dengan lebih banyak fungsi. Anda dapat membangunnya dengan pd.Timestampatau pd.to_datetime.

>>> pd.Timestamp(1239.1238934) #defautls to nanoseconds
Timestamp('1970-01-01 00:00:00.000001239')

>>> pd.Timestamp(1239.1238934, unit='D') # change units
Timestamp('1973-05-24 02:58:24.355200')

>>> pd.Timestamp('2017-10-24 05') # partial strings work
Timestamp('2017-10-24 05:00:00')

pd.to_datetime berfungsi sangat mirip (dengan beberapa opsi lagi) dan dapat mengonversi daftar string menjadi Stempel Waktu.

>>> pd.to_datetime('2017-10-24 05')
Timestamp('2017-10-24 05:00:00')

>>> pd.to_datetime(['2017-1-1', '2017-1-2'])
DatetimeIndex(['2017-01-01', '2017-01-02'], dtype='datetime64[ns]', freq=None)

Mengubah datetime Python ke datetime64 dan Timestamp

>>> dt = datetime.datetime(year=2017, month=10, day=24, hour=4, 
                   minute=3, second=10, microsecond=7199)
>>> np.datetime64(dt)
numpy.datetime64('2017-10-24T04:03:10.007199')

>>> pd.Timestamp(dt) # or pd.to_datetime(dt)
Timestamp('2017-10-24 04:03:10.007199')

Mengubah datetime numpy ke datetime dan Timestamp

>>> dt64 = np.datetime64('2017-10-24 05:34:20.123456')
>>> unix_epoch = np.datetime64(0, 's')
>>> one_second = np.timedelta64(1, 's')
>>> seconds_since_epoch = (dt64 - unix_epoch) / one_second
>>> seconds_since_epoch
1508823260.123456

>>> datetime.datetime.utcfromtimestamp(seconds_since_epoch)
>>> datetime.datetime(2017, 10, 24, 5, 34, 20, 123456)

Konversikan ke Stempel Waktu

>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')

Konversi dari Timestamp ke datetime dan datetime64

Ini cukup mudah karena cap waktu panda sangat kuat

>>> ts = pd.Timestamp('2017-10-24 04:24:33.654321')

>>> ts.to_pydatetime()   # Python's datetime
datetime.datetime(2017, 10, 24, 4, 24, 33, 654321)

>>> ts.to_datetime64()
numpy.datetime64('2017-10-24T04:24:33.654321000')
Ted Petrou
sumber
3
Sungguh gila bagaimana numpy ke datetime masih sulit / hacky ... apakah benar-benar tidak ada cara yang lebih baik? Ini adalah jawaban yang baik, saya berpikir untuk menerima untuk memindahkannya ke tingkat atas saya harus membaca yang lain lebih dalam sekali dengan komputer.
Andy Hayden
Apa yang aneh tentang itu? Stempel Waktu Panda bekerja dengan baik dan cukup sederhana.
Ted Petrou
2
Numpy ke datetime.
Andy Hayden
1
Saya pikir ini adalah jawaban terbaik yang pernah saya lihat. Berasal dari Excel, VBA, SAS, atau SQL, Python tampak aneh karena tidak hanya ada "satu cara" untuk bekerja dengan tanggal / waktu. Seperti banyak hal dalam Python atau R, tampaknya seseorang harus memilih metode / modul / kelas favorit dan tetap menggunakannya.
Sean McCarthy
Jawaban
29
>>> dt64.tolist()
datetime.datetime(2012, 5, 1, 0, 0)

Sebab DatetimeIndex, tolistmengembalikan daftar datetimeobjek. Untuk satu datetime64objek, ia mengembalikan satu datetimeobjek.

eumiro
sumber
Saya benar-benar harus mencoba semua metode :) (Saya kaget pada berapa lama saya bergulat dengan yang satu ini) Terima kasih
Andy Hayden
5
@hayden jika Anda tahu bahwa skalar / 0-d array saya lebih suka menggunakan .item()yang jauh lebih eksplisit (dan tidak ada yang bisa datang dan mulai berdebat bahwa itu harus mengembalikan daftar).
seberg
1
Saya khawatir ini sepertinya tidak selalu berhasil: misalnya dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100'), yang memberi waktu ( 1025222400000000000L) (!)
Andy Hayden
4
@hayden: tipe yang dikembalikan oleh .item()(disarankan oleh @seberg), .tolist()tergantung pada unit apa yang digunakan datetime64 misalnya, Dmenghasilkan datetime.date(), us(mikrodetik) menghasilkan datetime.datetime(), ns(nanodetik) menghasilkan long. Dan unit berubah tergantung pada nilai input misalnya, numpy.datetime64('2012-05-01')menggunakan 'D', numpy.datetime64('2012-05-01T00:00:00.000')menggunakan ms, numpy.datetime64('2012-05-01T00:00:00.000000000')menggunakan ns. Anda dapat membuka masalah jika ternyata membingungkan.
jfs
@AndyHayden Anda juga bisa menambahkan argumen tambahan, 'us' atau 'ms' untuk memastikan format yang sama diterapkan sehingga elemen datetime yang sama diproduksi di tolist ()
NM
11

Jika Anda ingin mengonversi seluruh rangkaian data panda menjadi datetime python biasa, Anda juga bisa menggunakan .to_pydatetime().

pd.date_range('20110101','20110102',freq='H').to_pydatetime()

> [datetime.datetime(2011, 1, 1, 0, 0) datetime.datetime(2011, 1, 1, 1, 0)
   datetime.datetime(2011, 1, 1, 2, 0) datetime.datetime(2011, 1, 1, 3, 0)
   ....

Ini juga mendukung zona waktu:

pd.date_range('20110101','20110102',freq='H').tz_localize('UTC').tz_convert('Australia/Sydney').to_pydatetime()

[ datetime.datetime(2011, 1, 1, 11, 0, tzinfo=<DstTzInfo 'Australia/Sydney' EST+11:00:00 DST>)
 datetime.datetime(2011, 1, 1, 12, 0, tzinfo=<DstTzInfo 'Australia/Sydney' EST+11:00:00 DST>)
....

CATATAN : Jika Anda beroperasi pada Seri Pandas Anda tidak dapat memanggil to_pydatetime()seluruh seri. Anda perlu memanggil .to_pydatetime()setiap dat 64 individu menggunakan pemahaman daftar atau yang serupa:

datetimes = [val.to_pydatetime() for val in df.problem_datetime_column]
fantabolous
sumber
10

Salah satu opsi adalah menggunakan str, dan kemudian to_datetime(atau serupa):

In [11]: str(dt64)
Out[11]: '2012-05-01T01:00:00.000000+0100'

In [12]: pd.to_datetime(str(dt64))
Out[12]: datetime.datetime(2012, 5, 1, 1, 0, tzinfo=tzoffset(None, 3600))

Catatan: tidak sama dengan dtkarena menjadi "offset-aware" :

In [13]: pd.to_datetime(str(dt64)).replace(tzinfo=None)
Out[13]: datetime.datetime(2012, 5, 1, 1, 0)

Ini tampaknya tidak elegan.

.

Pembaruan: ini bisa berurusan dengan "contoh buruk":

In [21]: dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100')

In [22]: pd.to_datetime(str(dt64)).replace(tzinfo=None)
Out[22]: datetime.datetime(2002, 6, 28, 1, 0)
Andy Hayden
sumber
Terima kasih Andy untuk membagikan tip ini. Untuk beberapa alasan saya tidak dapat membuatnya berfungsi, seperti yang saya bahas di sini: stackoverflow.com/questions/22825349/…
Amelio Vazquez-Reina
@ user815423426 ini tidak pernah merupakan solusi yang sangat kuat, saya kira Anda bisa meneruskan format ke konstruktor datetime untuk bekerja lebih umum. Tapi tidak terlalu pandastik!
Andy Hayden
8

Posting ini telah berlangsung selama 4 tahun dan saya masih berjuang dengan masalah konversi ini - jadi masalah ini masih aktif di 2017 dalam beberapa hal. Saya agak terkejut bahwa dokumentasi numpy tidak mudah menawarkan algoritma konversi yang sederhana tapi itu cerita lain.

Saya telah menemukan cara lain untuk melakukan konversi yang hanya melibatkan modul numpydan datetime, itu tidak memerlukan panda untuk diimpor yang menurut saya menjadi banyak kode untuk diimpor untuk konversi yang sederhana. Saya perhatikan bahwa datetime64.astype(datetime.datetime)akan mengembalikan datetime.datetimeobjek jika aslinya datetime64dalam satuan mikro-detik sedangkan unit lain mengembalikan cap waktu bilangan bulat. Saya menggunakan modul xarrayuntuk data I / O dari file Netcdf yang menggunakan datetime64unit dalam nanosecond membuat konversi gagal kecuali Anda pertama kali mengkonversi ke unit mikro-detik. Berikut adalah contoh kode konversi,

import numpy as np
import datetime

def convert_datetime64_to_datetime( usert: np.datetime64 )->datetime.datetime:
    t = np.datetime64( usert, 'us').astype(datetime.datetime)
return t

Hanya diuji pada mesin saya, yaitu Python 3.6 dengan distribusi Anaconda 2017 baru-baru ini. Saya hanya melihat konversi skalar dan belum memeriksa konversi berbasis array meskipun saya kira itu akan baik. Saya juga tidak melihat kode sumber datetime64 numpy untuk melihat apakah operasi masuk akal atau tidak.

ndl303
sumber
Ini bagus. terimakasih telah membuat ini.
Yu Chen
Barang bagus. Terima kasih.
misantroop
1

Saya telah kembali ke jawaban ini lebih dari yang dapat saya hitung, jadi saya memutuskan untuk menyatukan kelas kecil cepat, yang mengubah datetime64nilai Numpy menjadi nilai Python datetime. Saya harap ini membantu orang lain di luar sana.

from datetime import datetime
import pandas as pd

class NumpyConverter(object):
    @classmethod
    def to_datetime(cls, dt64, tzinfo=None):
        """
        Converts a Numpy datetime64 to a Python datetime.
        :param dt64: A Numpy datetime64 variable
        :type dt64: numpy.datetime64
        :param tzinfo: The timezone the date / time value is in
        :type tzinfo: pytz.timezone
        :return: A Python datetime variable
        :rtype: datetime
        """
        ts = pd.to_datetime(dt64)
        if tzinfo is not None:
            return datetime(ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second, tzinfo=tzinfo)
        return datetime(ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second)

Saya akan menyimpan ini di tas alat saya, sesuatu memberitahu saya saya akan membutuhkannya lagi.

MikeyE
sumber
2
Anda bisa melakukannyats.to_pydatetime()
Ted Petrou
0
import numpy as np
import pandas as pd 

def np64toDate(np64):
    return pd.to_datetime(str(np64)).replace(tzinfo=None).to_datetime()

gunakan fungsi ini untuk mendapatkan objek datetime ular piton asli

Kristal
sumber
Saya mendapat pesan kesalahanreplace() got an unexpected keyword argument 'tzinfo'
ogogmad
versi panda mana yang Anda gunakan? Saya memiliki Versi: 0.18.1 (pip show panda)
Crystal
sama seperti Anda. . .
ogogmad
Saya tidak tahu tetapi itu bekerja untuk saya seperti pesona. pix.toile-libre.org/upload/original/1475645621.png
Crystal
0

Beberapa solusi bekerja dengan baik untuk saya tetapi numpy akan mencabut beberapa parameter. Solusi yang bekerja lebih baik bagi saya adalah dengan membaca tanggal sebagai waktu panda dan mencabut secara eksplisit tahun, bulan dan hari objek panda. Kode berikut berfungsi untuk situasi yang paling umum.

def format_dates(dates):
    dt = pd.to_datetime(dates)
    try: return [datetime.date(x.year, x.month, x.day) for x in dt]    
    except TypeError: return datetime.date(dt.year, dt.month, dt.day)
João Gabriel John
sumber
-1

memang, semua tipe data ini bisa sulit, dan berpotensi bermasalah (harus tetap berhati-hati dengan informasi zona waktu). inilah yang telah saya lakukan, meskipun saya akui bahwa saya khawatir bahwa setidaknya sebagian dari itu adalah "bukan oleh desain". juga, ini dapat dibuat sedikit lebih kompak sesuai kebutuhan. dimulai dengan numpy.datetime64 dt_a:

dt_a

numpy.datetime64 ('2015-04-24T23: 11: 26.270000-0700')

dt_a1 = dt_a.tolist () # menghasilkan objek datetime dalam UTC, tetapi tanpa tzinfo

dt_a1

datetime.datetime (2015, 4, 25, 6, 11, 26, 270000)

# now, make your "aware" datetime:

dt_a2 = datetime.datetime (* daftar (dt_a1.timetuple () [: 6]) + [dt_a1.microsecond], tzinfo = pytz.timezone ('UTC'))

... dan tentu saja, itu dapat dikompresi menjadi satu baris sesuai kebutuhan.

Yoder
sumber
docs.scipy.org/doc/numpy/reference/… untuk perubahan penanganan zona waktu.
hpaulj
Harap editsesuaikan dengan yang semestinya: pemformatan kode, pemformatan kutipan, dan pemformatan teks. Selain itu, harap patuhi huruf besar, tata bahasa, dan periksa salah ketik, sesuai dengan pedoman SO - lihat: Cara Mengirim , dan Sampel Kode
SherylHohman