【发布时间】:2011-12-15 08:32:38
【问题描述】:
我正在尝试使用 Active Directory 中的 accountExpires 属性获取所有已过期的帐户。
由于属性类型是 Int8(64 位整数),coldfusion 不支持这么长的整数,我很难让它工作。
我可以使用某种功能或某种功能来实现上述目标吗?
谢谢!
【问题讨论】:
标签: datetime coldfusion active-directory
我正在尝试使用 Active Directory 中的 accountExpires 属性获取所有已过期的帐户。
由于属性类型是 Int8(64 位整数),coldfusion 不支持这么长的整数,我很难让它工作。
我可以使用某种功能或某种功能来实现上述目标吗?
谢谢!
【问题讨论】:
标签: datetime coldfusion active-directory
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
);
希望对您有所帮助。
【讨论】:
<cfset objJava = createObject("java","java.util.Date")><cfset dateJava = objJava.init((129407978957060010-116444736000000000)/10000)>我得到错误:INIT找不到合适的构造函数来调用,请使用javacast指定参数类型。但是当我尝试时:<cfset dateJava = objJava.init('1/1/2011')> 没关系。任何想法? :(
<cfset dateJava = objJava.init(javacast("long", (129407978957060010-116444736000000000)/10000))>