How To Convert Datetime <= To => Active Directory LDAP Win32 ...
Maybe your like
At some point, while developing a Mule application for Active Directory, it's almost inevitable that you'll need to manipulate Win32 FILETIME. In this article, we will see how to read/convert datetime to Active Directory timestamps and what is all about!
Getting started
Active Directory timestamps 18-digit:
Also known as 'Windows NT time format', 'Win32 FILETIME or SYSTEMTIME', or NTFS file time(wikipedia).
- Used in Microsoft Active Directory for pwdLastSet, accountExpires, LastLogon, LastLogonTimestamp, and LastPwdSet.
- The timestamp is the number of 100-nanosecond intervals (1 nanosecond = one billionth of a second =>1 Second = 1000000000 nanoseconds) since Jan 1, 1601, UTC.
FILETIME: 01/01/1601 UTC, One unit 1 correspond to 100ns (nanoSeconds)
Mulesoft use Unix/Epoch time
Also known as Epoch time, Posix time, seconds since the Epoch or UNIX Epoch time(wikipedia).
- It is the number of seconds that have elapsed since the Unix epoch, excluding leap seconds. The Unix epoch is 00:00:00 UTC on 1 January 1970 (an arbitrary date)
- This value is increased by a value of one second.
Unix time : 01/01/1970 UTC Units in Seconds => 0000000000t Epoch time = 116444736000000000 FILETIME
We will use this value as a constant in our DataWeave Transformation.
Steps
In order to convert these two types, we will follow a three steps process :
- Convert equivalent Filetime of 0000000000t Epoch time to nanoseconds (Epoch Time)
- Convert DateTime to Seconds (Epoch time)
- Compute the Filetime
In human date, we will use 2021-11-20 at 11:44:07 as our example date to convert.
1 - Convert equivalent FILETIME of 0000000000t Epoch time to nanoseconds (Epoch Time) :
- A - to nanoSeconds = 116444736000000000 * 100 = 11644473600000000000
- B - to seconds = 11644473600000000000 / 1000000000 = 11644473600
| Date | Epoch time | Seconds | Filetime |
| 01/01/1970 | 0000000000t | 11644473600 | 116444736000000000 |
11644473600 seconds will be our 0000000000t Epoch time.
We have to add this value to any date over 01/01/1970.
B - Convert DateTime to Seconds (Epoch time)
Value in seconds since 01/01/1970 till 2021-11-20T11:44:07 :
"2021-11-20T11:44:07" as DateTime as Number is 1637408647
C - Compute Filetime
Results of Step (A + B) to nanoSeconds / 100 (FileTime)
((1637408647 + 11644473600)* 1000000000)/100
Result => 132818822470000000
DataWeave Implementation
%dw 2.0 output application/json /* - Win32 FILETIME (1=100nanoseconde) begin : 01/01/1601 - Epoch Time begin : 01/01/1970 - Win32 FILETIME from 01/01/1601 to 01/01/1970 = 116444736000000000 - convert to seconds - (116444736000000000*100) => to nanoseconde - (116444736000000000100 / 1000000000 ) => to seconds 0t Epoch Time = 11644473600 used as constant */ fun dateToFileTime(date) = ((date as DateTime as Number)+ 11644473600)* 10000000 //(date in Seconds + 0t epochTime in Seconds) *(1000000000/100) --- { a : dateToFileTime("2021-11-20T11:44:07"), b : dateToFileTime(now()) } result=> { "a": 132818822470000000, "b": 132820569110000000 }Written by Ayman Lahrim, API integration engineer & MuleSoft Mentor
Tag » Active Directory Pwdlastset Convert To Date
-
C# - How To Convert Active Directory PwdLastSet To Date/Time
-
Efficiently Converting Pwdlastset To Datetime In A Single Line.
-
LDAP, Active Directory & Filetime Timestamp Converter
-
How To Convert Date/time Attributes In Active Directory To Standard ...
-
Converting Pwdlastset To Datetime Datatype Not Working From Hash ...
-
Get-AdUser PwdLastSet - Get Aduser Last Password Change
-
How To Convert Active Directory Timestamp To Date In Excel (4 ...
-
PwdLastSet, AccountExpires, LastLogon, Timestamp LDAP / Active ...
-
Convert Active Directory PwdLastSet Attribute To Readable Time
-
Active Directory Date Long Integer PwdLastSet Conversion - DevCentral
-
Solved: How To Convert Dates From Data Source Active Direc...
-
TIP: Active Directory Module Date Properties - Tech Wizard
-
Convert PwdLastSet To A Human Readable Date
-
How To Convert Active Directory Long Date In SDI/TDI - Forums - IBM