2016-03-24 11 views
0

Doğru, bu yüzden this HubSpot endpoint aracılığıyla yaklaşık 26.000 not yükledim ve yüklenen notların bir demetinin çok yanlış zaman damgası olduğunu fark ettim (örneğin, arka tarihli olmak yerine) ya da güncel olarak, geleceğe doğru akıtılıyorlar.Değişken İnterpolasyon, Delorean işlevlerinin sonucunu değiştirir

Sorunu, zaman damgasını zaman damgasını ayrıştırıp dönüştürmeyi kolaylaştırmak için Delorean modülünü kullanan kodun bir bölümüne geri izledim. Sorun, .format() işlevi aracılığıyla değişken enterpolasyon kullandığımda, bir şekilde bir şey değişiyor gibi görünüyor.

Örnek 1 - Interpolasyon yok.

def ref_date_epoch(): 
     parseDate = parse("29/04/2014 00:00:00 -0700") 
     getEpoch = parseDate.epoch 
     shiftEpoch = epoch(getEpoch).shift("US/Eastern") 
     convertEpoch = shiftEpoch.epoch 
     testing = int(convertEpoch) 
     return "{testing}000".format(testing=testing) 

print(ref_date_epoch()) 
sys.exit() 

Yukarıdaki örnek doğru tarihi içine dönüştürür dönem zaman damgası olarak 1398754800000 döner - 29/04/2014.

Örnek 2 - Enterpolasyon ile.

def ref_date_epoch(datestr): 
    if len(datestr) > 0: 
     parseDate = parse("{csvDate} 00:00:00 -0700".format(csvDate=datestr)) 
     getEpoch = parseDate.epoch 
     shiftEpoch = epoch(getEpoch).shift("US/Eastern") 
     convertEpoch = shiftEpoch.epoch 
     testing = int(convertEpoch) 
     return "{testing}000".format(testing=testing) 
    else: 
     None 

print(ref_date_epoch(row[2])) 
sys.exit() 

Bu kez, yukarıdaki örnek, gerçekten çok yanlış çağ zaman damgası gibi 1597302000000 döndürür - bu 13/08/2020 olmak biter. Ayrıntılı olarak, datestr argümanı, tarihi içeren bir csv içindeki satırın dizinine referans veren row[2] listesini kabul ediyor. .format() fonksiyonu olmadan

Örnek 3.:

def ref_date_epoch(datestr): 
    if len(datestr) > 0: 
     parseDate = parse(datestr) 
     getEpoch = parseDate.epoch 
     shiftEpoch = epoch(getEpoch).shift("US/Eastern") 
     convertEpoch = shiftEpoch.epoch 
     testing = int(convertEpoch) 
     return "{testing}000".format(testing=testing) 
    else: 
     None 

print(ref_date_epoch(row[2])) 
sys.exit() 

Bu hala 1597276800000 döndürür. Görünüşe göre, tarihe dolaylı olarak gönderme yapmak, zamanı değiştiriyor gibi görünüyor. Ne verir?

Bunların hepsinden bahsetmişken - Delorean'ın bu şekilde çalışmasını sağlamak için bir yol yoksa, bir tarih dizesini milisaniye ile zaman damgasına dönüştürmenin bir yolu var mı?

Düzenleme: Ayrıca, birçok notun da doğru olduğunu belirtmeyi unuttum - komut dosyasını çalıştırdığım bilgisayar, epoch zaman damgasının oluşturulmasını etkiler mi? . Bir kötü biçimlendirilmiş CSV bir karışımı (Şimdi bu kullanıyorum yerine dd/mm/yyyy ve dolambaçlı kod dd/mm/yy kullanarak gibi

cevap

0

Boş ver, görünüyor ve çalışıyor gibi görünüyor:

def ref_date_epoch(): 
     parseDate = parse(row[2]) 
     getEpoch = parseDate.epoch 
     shiftEpoch = epoch(getEpoch).shift("US/Eastern") 
     convertEpoch = shiftEpoch.epoch 
     testing = int(convertEpoch) 
     return "{testing}000".format(testing=testing)