Schön euch kennenzulernen, alle zusammen. Mein Name ist @tkmbn und ich bin GIS-Ingenieur bei Optimind Co., Ltd.. Dies ist der erste Beitrag zu Qiita.
Ich werde den Zeitrahmen (Kombination aus Datum und Uhrzeit, Startdatum und Uhrzeit bis Enddatum und Uhrzeit) und die Verwendung der Bibliothek Zeitfenster erläutern, die dies tut.
Es organisiert komplizierte Zeitrahmen ordentlich! ← Was ich mit dieser Bibliothek am liebsten machen möchte.
Beim Erfassen von Daten mit einem Zeitrahmen aus der Datenbank wurde angefordert, zusammenzufassen, ob sich der Zeitrahmen überschneidet. Ich habe versucht, es irgendwie selbst zu implementieren, war aber verwirrt und suchte nach "Ich frage mich, ob es ein gutes Tool gibt ..." Bibliothek oben / Zeitfenster) wurde gefunden. Zusätzlich zur Readme-Datei gab es verschiedene nützliche Funktionen, sodass ich einen Artikel mit einem Memorandum für mich selbst schrieb.
Vollständiger Kommentar! Das ist nicht der Fall, also weiß ich es nicht. .. ..
pip install time-window
Bitte denken Sie, dass die erste eine japanische Übersetzung von readme lol ist
Wenn Sie ein Zeitfenster vom 1. März 2020 um 12:00 Uhr bis zum 1. März 2020 um 15:00 Uhr erstellen möchten. .. ..
from datetime import datetime
from time_window import TimeWindow
t1 = datetime(2020, 3, 1, 12, 00, 00)
t2 = datetime(2020, 3, 1, 15, 00, 00)
tw1 = TimewWindow(t1, t2)
tw1
-> TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0))
Beachten Sie zu diesem Zeitpunkt, dass der Zeitrahmen "[t1, t2)" ist!
Es kann auch mit timedelta erstellt werden.
from datetime import datetime, timedelta
from time_window import TimeWindow
t1 = datetime(2020, 3, 1, 12, 00, 00)
delta = timedelta(hours=3)
tw2 = TimeWindow.from_timedelta(t1, delta)
tw2
-> TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0))
Das gleiche Ergebnis wurde erhalten.
delta, middle Wenn Sie den Unterschied im Zeitrahmen wissen möchten,
tw1.delta
-> datetime.timedelta(0, 10800)
Wenn Sie den Punkt in der Mitte des Zeitrahmens wissen möchten,
tw1.middle
-> datetime.datetime(2020, 3, 1, 13, 30)
overlaps
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw.overlaps(tw2)
-> True
Richtig, wenn sie sich überlappen, andernfalls Falsch.
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw4 = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 14, 0))
tw.contains(tw4)
-> True
Richtig, wenn enthalten, sonst falsch.
contiguous
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw3 = TimeWindow(datetime(2020, 3, 1, 15, 0), datetime(2020, 3, 1, 18, 0))
tw.contiguous(tw3)
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 15, 0), datetime.datetime(2020, 3, 1, 18, 0))]
Wenn es berührt wird, wird die Liste von TimeWindow zurückgegeben, und wenn es nicht berührt wird, wird False zurückgegeben.
tw = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw.intersection(tw2)
-> TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 15, 0))
tw.union(tw2)
-> TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0))
from datetime import datetime, timedelta
from time_window import TimeWindow, TimeWindowsCollection
tw = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
twc = TimeWindowsCollection([tw, tw2])
twc
-> [TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0))]
##Ich möchte nach Startzeit sortieren!
twc.time_windows_sorted_by_since
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 18, 0))]
Jetzt habe ich genau das getan, was ich tun möchte.
tw = TimeWindow(datetime(2020, 3, 1, 13, 0), datetime(2020, 3, 1, 18, 0))
tw2 = TimeWindow(datetime(2020, 3, 1, 12, 0), datetime(2020, 3, 1, 15, 0))
tw3 = TimeWindow(datetime(2020, 3, 1, 19, 0), datetime(2020, 3, 1, 21, 0))
twc = TimeWindowsCollection([tw, tw2, tw3])
twc
-> [TimeWindow(datetime.datetime(2020, 3, 1, 13, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 15, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 19, 0), datetime.datetime(2020, 3, 1, 21, 0))]
twc.compressed()
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 19, 0), datetime.datetime(2020, 3, 1, 21, 0))]
Die überlappenden Zeitrahmen sind zusammen gruppiert, und die nicht überlappenden Zeitrahmen sind unterschiedliche Zeitrahmen.
Es gab jedoch eine Falle. Als ich versuchte, das TimeWindow durch normale Angabe des Index abzurufen,
twc.compressed()[0]
-> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'TimeWindowsCollection' object does not support indexing
Wenn Sie das zurückgegebene Formular betrachten, sieht es wie eine normale Liste aus, aber es scheint anders zu sein. .. .. Da wir das TimeWindowsCollection-Objekt zurück in die TimeWindow-Liste verschieben müssen,
twc.compressed().time_windows
-> [TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0)),
TimeWindow(datetime.datetime(2020, 3, 1, 19, 0), datetime.datetime(2020, 3, 1, 21, 0))]
twc.compressed().time_windows[0]
TimeWindow(datetime.datetime(2020, 3, 1, 12, 0), datetime.datetime(2020, 3, 1, 18, 0))
Ich konnte es sicher herausnehmen! !!
Vielen Dank für das Lesen bis zum Ende! Wenn Sie Fragen oder Fehler haben, kommentieren Sie bitte.
Recommended Posts