2016-04-08 17 views
0

Ben unix zaman damgaları ile benim kodunda böyle bir matris vardır: event_sequences her olay için Python: Unix zaman damgasını bir sonraki gün 00:00 ve 23:59'da nasıl alabilirim?

event_sequences = [ 
    [1368136883, 1368137089], #The first event is never empty 
    [1368214777, 1368214966], 
    [], 
    .... There are the perfect number of days (empty arrays) in the gaps between the existing events. 
    [], 
    [1368747495, 1368747833], 
    [1368830501, 1368831869] 
] 

Ben onun başlangıç ​​ve sona (= event_sequences[n][0] ve sonunu = event_sequences[n][1] başlangıç) biliyorum. Gördüğünüz gibi boş olan bazı olaylar var ve benim almam gereken yaklaşım, bu boş olayların başlangıcını ve sonunu, son olayın kaydedilmesinden sonraki gün 00:00 ve 23:59 olarak belirlemektir.

Boş olayların başlangıç ​​ve bitişlerinin de unix zaman damgası olması gerekir. Bunu python'da nasıl yapabilirim?

+0

: [Nasıl yarimlarin (belirli bir zamanda) tarihini bir zaman damgasina dönüştürmek için] (http://stackoverflow.com/q/30822699/4279) – jfs

cevap

0

Aşağıdakiler hile yapmalıdır. event_sequences ilk eleman

  • event_sequences gün boşlukları olmalı mı boş bir liste ise

    • Bu başarısız olur: Bir kaç soru/şeylerin farkında olsa olması? Örneğin, aşağıdaki çıktıda, boş girişler doldurulduktan sonra bile, 5/12/2013 ve 5/16/2013 arasında sırayla bir boşluk olduğunu göreceksiniz. Eğer iki ardışık boş girdilerine sahip burada durumda
    • , ilk senin boş girmesinden sonraki gün için ikinci boş girişini istediğini farz

    Kodu: related

    from datetime import datetime, timedelta 
    import time 
    
    event_sequences = [ 
        [1368136883, 1368137089], 
        [1368214777, 1368214966], 
        [], 
        [], 
        [1368747495, 1368747833], 
        [1368830501, 1368831869] 
    ] 
    
    #take the last_day recorded date as a datetime object from the event_sequences and return a 2-element list 
    #with the unix timestamps for 00:00 and 23:59 
    def getNextDay(last_day): 
        next_day = last_day + timedelta(days=1) 
        next_day_start = next_day.replace(hour=0,minute=0,second=0) 
        next_day_end = next_day.replace(hour=23,minute=59,second=0) 
        return [int(next_day_start.strftime("%s")), int(next_day_end.strftime("%s"))] 
    
    def fillEmptyDates(event_list): 
        new_event_list = [] 
        #note: this will fail if the first element in the list of event_sequences is blank 
        last_day = int(time.time()) 
        for x in event_sequences: 
         if len(x) == 0: 
          next_day = getNextDay(last_day) 
          last_day = datetime.utcfromtimestamp(next_day[1]) 
         else: 
          next_day = x 
         last_day = datetime.utcfromtimestamp(next_day[1]) 
         new_event_list.append(next_day) 
        return new_event_list 
    
    new_event_sequence = fillEmptyDates(event_sequences) 
    
    print new_event_sequence 
    
    #[[1368136883, 1368137089], [1368214777, 1368214966], [1368230400, 1368316740], [1368316800, 1368403140], [1368747495, 1368747833], [1368830501, 1368831869]] 
    
    for event in new_event_sequence: 
        print str(datetime.utcfromtimestamp(event[0]))+ ' and '+str(datetime.utcfromtimestamp(event[1])) 
    
    #2013-05-09 22:01:23 and 2013-05-09 22:04:49 
    #2013-05-10 19:39:37 and 2013-05-10 19:42:46 
    #2013-05-11 00:00:00 and 2013-05-11 23:59:00 
    #2013-05-12 00:00:00 and 2013-05-12 23:59:00 
    #2013-05-16 23:38:15 and 2013-05-16 23:43:53 
    #2013-05-17 22:41:41 and 2013-05-17 23:04:29 
    
  • +0

    Evet belirtmeyi unuttum: 1 Yumruk öğesi hiçbir zaman boş olmayacak, 2 event_sequences arasında boşluk var itens ve söylendiği gibi doldurulmalıdır, 3 - 2 boş girişler: boş olsa bile ikinci boş giriş son girişe girer. –

    +0

    Size @Max çözümünü kullanıyorum, ancak bir sorun daha buldum. Gönderiyi size gösterecek şekilde düzenleyeceğim. –

    +0

    Çözümleriniz doğru, dizileri doğrulamak için ctime kullanıyordum, ancak yerel saatim, fonksiyona müdahale etti ve bana yanlış zaman dizgesini veriyordu. İnternette test ettim ve düzgün çalışıyor. (http: // goo .gl/hz2KUS) –