Python'da, çağdan beri geçen saniyeleri bir 'datetime` nesnesine nasıl dönüştürürsünüz?


248

timeModül çağında yana saniye ile başlangıç edilebilir:

>>> import time
>>> t1=time.gmtime(1284286794)
>>> t1
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19, 
                 tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)

Bir datetime.datetimenesneyi aynı şekilde başlatmanın zarif bir yolu var mı ?


Yanıtlar:


404

datetime.datetime.fromtimestamp zaman dilimini biliyorsanız, aynı çıktıyı üretebilirsiniz. time.gmtime

>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)

veya

>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)

42
tuhaf, datetime.utcfromtimestampsaf bir zaman damgası oluşturur. Ben zorunda kaldı import pytzve kullanımı datetime.fromtimestamp(1423524051, pytz.utc)bilinçli bir datetime oluşturun.
Matt

6
Bir takip üzerine yukarıda, içe gerekmez Python> = 3.2 olduğu gibi pytzsadece gereken - yalnızca UTC zaman damgası istiyorsanız kütüphane from datetime import datetime, timezone: ve o zaman aşağıdaki gibi diyoruz datetime.fromtimestamp(1423524051, timezone.utc). Sadece UTC saat dilimine ihtiyacım olduğunda fazladan kütüphaneyi birçok kez kaydetti pytz.
phouse512

38

Dönemden beri saniye datetimeiçin strftime:

>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'

Datetime.fromtimestamp (1579366345) .strftime ('% Y-% m-% d% H:% M:% S')
vml19

27

Dokümanlardan, çağdan beri saat dilimi farkında bir tarih / saat nesnesini almanın önerilen yolu:

Python 3 :

from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)

Python 2 , pytzşunları kullanarak :

from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)

Altyazılarınızdaki belgelere ("Python 3", "Python 2") bir bağlantı yararlı olur - ayrıca bunların sırasını değiştirmenizi öneririz.
Adam Matan

Güncellenmiş. Siparişi aynı şekilde bırakmak, çünkü bu Python belgelerine uyuyor.
Meistro

pytzsadece utctzinfo nesnesini elde etmenize gerek yok . Kendiniz oluşturmak kolaydır
jfs

9

Bu datetime.datetime dikkat edin. fromtimestamp (zaman damgası) ve. utcfromtimestamp (timestamp), 1 Ocak 1970'ten önceki tarihler için pencerelerde başarısız olurken, negatif unix zaman damgaları unix tabanlı platformlarda çalışıyor gibi görünüyor. Dokümanlar bunu söylüyor:

" Zaman damgası platform C gmtime () işlevi tarafından desteklenen değerler aralığının dışındaysa ValueError değerini yükseltebilir. Bunun 1970 ile 2038 yıllarındaki yıllarla sınırlı olması yaygındır "

Ayrıca bkz.


: o) evet, hala
düzeltmek

5
utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp)geçici çözüm bulmak için kullanabilirsiniz .
jfs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.