python - 按日期查询 LDAP

标签 python datetime ldap python-ldap

问题:

某些 LDAP 日期字段,例如 createTimestamppwdChangedTime,保存在 "generalized datetime format" 中。 :

{"createTimestamp": "20100226142156Z"}

其中包含日期和时间组件。

问题:

按特定日期查询 LDAP 记录的规范方法是什么?

示例用例:获取昨天创建的所有用户。

最佳答案

首先,我们需要一个可重用的函数来将日期时间转换为通用时间格式:

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'

现在,没有直接的方法来过滤通用时间戳的日期部分。这个想法是要求日期是:

  • 大于或等于包含 00:00:00 时间部分的日期
  • 小于或等于时间部分为 23:59:59 的日期

实现:

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

希望这对将来的人有所帮助。

关于python - 按日期查询 LDAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37646962/

相关文章:

python - 如何在 pandas date_range 方法中包含结束日期?

vba - 寻找 LDAP URL?

python - 编写api时需要一些建议

python - 使用 Praw 按关键字搜索每个 subreddit

python - scipy.spatial 的简单 2D 凸包错误

ruby-on-rails - 在具有可变间隔的日期之间搜索 w/rails

sql-server - SQL - 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

python - 很难理解为什么这两种矩阵切片方法在 numpy 中并不等效

Erlang SSHA LDAP

java - Spring数据ldap配置