2017-09-11 3 views
1

J'ai une liste de chaînes, et l'un d'eux ressemble à ceci:Incrémenter fois si la date a changé?

'Thu Jun 18 19:58:02 2015 
...many lines of data... 
txup: 19:59:47 txdown: 20:05:22 
rxup: 21:43:17 rxdown: 22:13:01' 

Mais un autre peut ressembler à ceci:

'Fri Jun 19 23:12:12 2015 
...many lines of data... 
txup: 23:39:47 txdown: 23:57:22 
rxup: 00:01:17 rxdown: 01:13:01' 

Comme vous pouvez le voir, dans certains cas, le temps peut traverser minuit. Lorsque cela se produit, en utilisant la chaîne ci-dessus comme exemple, la date associée à ce moment serait maintenant Juin 20 au lieu de juin 19.

Je dois écrire un code qui compare l'heure 'rxup' avec la date/heure au début de la chaîne et reconnaît si et quand il augmente d'un jour parce qu'il a passé minuit (tous par rapport à la date/heure au début).

S'il n'a pas franchi minuit et est donc le même jour, alors j'ai terminé. Mais s'il a traversé minuit, je dois prendre la différence entre ce temps et l'heure au début probablement comme un objet timedelta, et ajouter cet incrément sur une copie de l'heure au début. Comment ferais-je cela?

+0

Oh, mon anniversaire, Nyan!^_ ^ – bipll

Répondre

1

Si les temps croissent de façon monotone, vous pouvez simplement les comparer dans l'ordre lexicographique. '00: 01: 17' est évidemment inférieur à '23: 39: 47 ', donc chaque fois que l'horodatage suivant est inférieur à l'heure actuelle, vous incrémentez la date.

1

En supposant que rxup apparaît toujours après txdown, mais moins de 24 heures plus tard, vous pouvez le comparer comme ci-dessous:

# txdown, rxup - datetimes with respective times, date part doesn't matters 
# associated_date - datetime associated with string 
if rxup.time() < txdown.time(): 
    associated_date += datetime.timedelta(days=1)