2016-04-08 5 views
0

Ich habe eine Matrix wie dies in meinem Code mit Unix-Zeitstempel:Python: Wie erhalten Sie den nächsten Tag der Unix-Zeitstempel um 00:00 und 23:59?

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] 
] 

für jedes Ereignis in event_sequences Ich kenne seinen Anfang und sein Ende (Start = event_sequences[n][0] und end = event_sequences[n][1]). Wie Sie sehen können, sind einige Ereignisse leer und der Ansatz, den ich machen muss, ist, den Anfang und das Ende dieser leeren Ereignisse als 00:00 und 23:59 des Tages nach dem letzten aufgezeichneten Ereignis festzulegen. Wie

[ 
[start, end], 
[start, end], 
[the day after the last event at 00:00, the day after the last event at 23:59] 
] 

Der Anfang und das Ende der leeren Ereignisse müssen auch Unix-Zeitstempel sein. Wie kann ich das in Python machen?

+0

bezogen werden: [How morgen (Datum) in einen Zeitstempel umwandeln (http://stackoverflow.com/q/30822699/4279) – jfs

Antwort

0

Folgendes sollte den Trick machen. obwohl ein paar Fragen/Dinge zu beachten:

  • Dies wird fehlschlagen, wenn das erste Element in event_sequences ist eine leere Liste
  • Sollte es in event_sequences Lücken in Tagen? In der folgenden Ausgabe sehen Sie beispielsweise, dass zwischen dem 05.12.2013 und dem 16.05.2013 eine Lücke in Ihrer Sequenz besteht, selbst wenn die leeren Einträge gefüllt sind.
  • Im Fall hier, wo Sie zwei aufeinanderfolgende leere Einträge haben, nahm ich an Sie den zweiten leeren Eintrag wollte am Tag nach dem ersten leeren Eintrag

-Code sein:

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

Ja, ich habe vergessen zu spezifizieren: 1 Das erste Element wird niemals leer sein, 2 es gibt Lücken zwischen den event_sequences itens und das muss wie gesagt gefüllt werden, 3 - 2 leere Einträge: der zweite leere Eintrag bekommt den letzten Eintrag, auch wenn dieser leer war. –

+0

Ich benutze Sie Lösung @ Max, aber ich habe ein Problem noch nicht gefunden. Ich werde den Beitrag bearbeiten, um es Ihnen zu zeigen. –

+0

Deine Lösungen haben recht, ich habe gerade ctime benutzt, um die Sequenzen zu verifizieren, aber meine lokale Zeit hat sich auf die Funktion ausgewirkt, weil sie mir die falsche Zeit gab. Ich habe es online getestet und es funktioniert einwandfrei. (http: // goo .gl/hz2KUS) –