Zunächst einmal brauchen wir eine wiederverwendbare Funktion von Datetime zu einem generalisierten Zeitformat konvertieren:
def convert_datetime_to_generalized_time(dt):
"""Convert datetime object to generalized time format."""
dt = dt.timetuple()
gtime = str(dt.tm_year) + ''.join('0' * (2 - len(str(item))) + str(item)
for item in (dt.tm_mon, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec))
return gtime + 'Z'
Nun gibt keine direkte Möglichkeit ist das Datum Komponente eines verallgemeinerten Zeitstempels zu filtern. Die Idee wäre, um das Datum zu fragen zu sein:
- größer oder gleich als Datum mit einem 0.00.00 Zeit Teil
- weniger als oder gleich Datum mit einem 23.59.59 Zeitteil
Umsetzung:
import datetime
def get_ldap_date_range_query(dt):
start_date = dt.replace(hour=0, minute=0, second=0)
end_date = dt.replace(hour=23, minute=59, second=59)
return "(&(createTimestamp>=%s)(createTimestamp<=%s))" % (convert_datetime_to_generalized_time(start_date),
convert_datetime_to_generalized_time(end_date))
print(get_ldap_date_range_query(datetime.datetime.now() - datetime.timedelta(days=1)))
Dies würde eine LDAP-Abfrage drucken, die alle Benutzer gestern erstellt würde passen:
(&(createTimestamp>=20160604000000Z)(createTimestamp<=20160604235959Z))
Hoffe, dass würde jemand in der Zukunft helfen.