【问题标题】:Coldfusion calculate accountExpiresColdfusion 计算 accountExpires
【发布时间】:2011-12-15 08:32:38
【问题描述】:

我正在尝试使用 Active Directory 中的 accountExpires 属性获取所有已过期的帐户。

由于属性类型是 Int8(64 位整数),coldfusion 不支持这么长的整数,我很难让它工作。

我可以使用某种功能或某种功能来实现上述目标吗?

谢谢!

【问题讨论】:

    标签: datetime coldfusion active-directory


    【解决方案1】:

    Java 中的 64 位整数是 java.lang.Long。在 ColdFusion 中,Long 是隐含的 converted to Integers

    accountExpires 是一个windows file time structure,表示自 1601 年 1 月 1 日以来的 100 纳秒间隔数。This thread 显示了我们如何获取一个 Windows 文件的时间:

    long diff1601to1970 = 315532800 * 1000000000; // <-- diff in nanoseconds(1/1/1601 to 1/1/1970)
    long currentFrom1970 =  System.currentTimeMillis() * 1000000;
    long currentFrom1601 = diff1601to1970 + currentFrom1970;
    

    这允许我们在 ColdFusion 中执行以下操作:

    accountExpiresFileTime = 129407978957060010;
    date = createObject("java", "java.util.Date").init(
        (accountExpiresFileTime-116444736000000000)/10000
    );
    

    希望对您有所帮助。

    【讨论】:

    • 您好,感谢您的回复。我试过&lt;cfset objJava = createObject("java","java.util.Date")&gt;&lt;cfset dateJava = objJava.init((129407978957060010-116444736000000000)/10000)&gt;我得到错误:INIT找不到合适的构造函数来调用,请使用javacast指定参数类型。但是当我尝试时:&lt;cfset dateJava = objJava.init('1/1/2011')&gt; 没关系。任何想法? :(
    • 为我工作。 CF 9,0,1,274733。有时,coldfusion 可能会与重载的 java 方法混淆。因此,请尝试将您的论点包装在 java cast &lt;cfset dateJava = objJava.init(javacast("long", (129407978957060010-116444736000000000)/10000))&gt;
    • 我现在正在运行 CF5。我很确定我之前尝试过 javacast,但我会在星期一再次检查
    • 好的,由于某种原因,CFLDAP 无法检索 accountExpires 属性。所有其他 Int8 属性相同。知道如何让它工作吗? :(
    • 我不害怕 - 但这是一个不同的问题,所以我建议您将其作为一个单独的问题发布。但是一旦你发现了 cfldap 不工作的原因——至少你现在知道如何在 CF 中使用 windows 文件时间了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多