问题:
某些LDAP日期字段(例如createTimestamp
或pwdChangedTime
)保存在"generalized datetime format"中:
{"createTimestamp": "20100226142156Z"}
其中包含日期和时间组件。
问题:
按特定日期查询LDAP记录的规范方法是什么?
示例用例:获取昨天创建的所有用户。
答案 0 :(得分:3)
首先,我们需要一个可重复使用的函数来从datetime转换为通用时间格式:
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'
现在,没有直接的方法来过滤广义时间戳的日期组件。想法是要求日期:
实现:
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)))
这将打印一个LDAP查询,该查询将匹配昨天创建的所有用户:
(&(createTimestamp>=20160604000000Z)(createTimestamp<=20160604235959Z))
希望将来可以帮助某人。