Convert LDAP AccountExpires to DateTime in C#

ldap accountexpires convert to date sql
active directory accountexpires to date
ldap time converter
epoch time converter ldap
active directory account expires date format excel
accountexpires: 9223372036854775807
filetime converter
current ldap time

I want to convert 18 digit string from LDAP AccountExpires to Normal Date Time Format.

129508380000000000 >> May 26 2011

I got the above conversion from using the following link.

http://www.chrisnowell.com/information_security_tools/date_converter/Windows_active_directory_date_converter.asp?pwdLastSet,%20accountExpires,%20lastLogonTimestamp,%20lastLogon,%20and%20badPasswordTime

I tried to convert by using DateTime.Parse or Convert.ToDateTime. But no success.

Anyone know how to convert it? Thanks very much.

Edited answer

It's the number of ticks since Jan-01-1601 in UTC, according to Reference, which describes the significance of the year 1601. Good background reading.

var accountExpires = 129508380000000000;
var dt = new DateTime(1601, 01, 01, 0, 0, 0, DateTimeKind.Utc).AddTicks(accountExpires);
Original Accepted Answer

It's the number of ticks since Jan-02-1601.

DateTime dt = new DateTime(1601, 01, 02).AddTicks(129508380000000000);

Convert LDAP AccountExpires to DateTime in C#, Question. I want to convert 18 digit string from LDAP AccountExpires to Normal Date Time Format. 129508380000000000 >> May 26 2011. Convert Active Directory AccountExpires attribute Leave a reply I wrote a quick function to convert the AccountExpires attribute from the Long Integer value to a DateTime object or a string object of “!!

You can use the FromFileTime method on the DateTime class, but watch out, when this field is set to not expire, it comes back as the Int64.MaxValue and doesn't work with either of these methods.

Int64 accountExpires = 129508380000000000;

DateTime expireDate = DateTime.MaxValue;

if (!accountExpires.Equals(Int64.MaxValue))
    expireDate = DateTime.FromFileTime(accountExpires);

Account expires value in LDAP. - MSDN, Visual C#. Visual C# var rootEntry = new DirectoryEntry("LDAP://xxx.com"); How do I get the account expire into a DateTime value? You need to convert it to FILETIME, as per the specification: DateTime dt = DateTime.Now.AddDays(30); long ftAccountExpires = dt.ToFileTime(); In the above example, if you set accountExpires to the value of ftAccountExpires, the account will expire 30 days from now

Some info for anyone who came here looking to set the AccountExpires value.

To clear the expiry is nice and easy:

entry.Properties["accountExpires"].Value = 0;

However if you try to directly write back an int64 / long:

entry.Properties["accountExpires"].Value = dt.ToFileTime();

You can get a 'COMException was unhandled - Unspecified error'

Instead write back the value as a string data type:

entry.Properties["accountExpires"].Value = dt.ToFileTime().ToString();

Be aware of the time of day you are setting, for consistancy with ADUC the time should be 00:00.

Instead of .Now or .UtcNow you can use .Today:

var dt1 = DateTime.Today.AddDays(90);
entry.Properties["accountExpires"].Value = dt1.ToFileTime().ToString();

Other input like dateTimePicker you can replace the time, Kind as Local for the Domain Controller:

var dt1 = dateTimePicker1.Value;
var dt2 = new DateTime(dt1.Year, dt1.Month, dt1.Day, 0, 0, 0, DateTimeKind.Local);
entry.Properties["accountExpires"].Value = dt2.ToFileTime().ToString();

Convert LDAP AccountExpires to DateTime in C#, I want to convert 18 digit string from LDAP AccountExpires to Normal Date Time Format. 129508380000000000 >> May 26 2011 I got the above conversion from​  I want to convert 18 digit string from LDAP AccountExpires to Normal Date Time Format. 129508380000000000 >> May 26 2011 I got the above conversion from using the following link.

If you View Source on the link you posted you should see a Javascript conversion algorithm that should translate quite nicely to c#

Reading AccountExpires Property, I have seen several posts on being able to set the Account Expires property but none have actually helped me be able to read Here is how it would look in C# (​convert to VB. Then, you can convert those to either DateTime or TimeSpan values. DirectoryEntry user = new DirectoryEntry("LDAP://blah. AccountExpires is a Microsoft Active Directory AttributeType and represents the date when a Microsoft Active Directory account expires. AccountExpires is similar functionality to PwdEndTime form Draft-behera-ldap-password-policy. We recommend when an account is created and the account never expires, then set this value to "0". A value of: 0 or

For Ruby

def ldapTimeConverter(ldap_time)
  Time.at((ldap_time/10000000)-11644473600)
end

LDAP, Active Directory & Filetime Timestamp Converter, Convert 18-digit LDAP/FILETIME timestamps to human-readable date These are used in Microsoft Active Directory for pwdLastSet, accountExpires, LastLogon​  Now I need to convert this output, specifically the accountExpires attribute to a humanly readable date. After googling I figured that I can use something like the below to convert between the accountExpires and a datetime.

How to calculate the Active Directory's account expired date in C#?, In the Active Directory, the accountExpire attribute is used to specify the date C# code demostrates you how to convert this value to Datetime  I'm taking the value of the expire date out of an AD account (accountExpires attribute) and passing it into this function. static DateTime LargeIntToDateTime(ActiveDs.LargeInteger li)

ad accountexpires convert to date, I want to convert 18 digit string from LDAP AccountExpires to Normal Date Time Format. 129508380000000000 >> May 26 2011 I got the above conversion from​  I have seen several posts on being able to set the Account Expires property but none have actually helped me be able to read when a users account is set to expire into a proper date.

AD: convert accountexpires value -> datetime? Solutions, Convert 18-digit LDAP/FILETIME timestamps to human readable date. The 18-​digit Active Convert LDAP AccountExpires to DateTime in C# - Stack Overflow. We calculate the difference of the universal date/time value to that of our local date/time since some time zones are both hour(s) and 30 minutes off GMT. SUMMARY In conclusion, we can now deal with converting Active Directory timestamps using just T-SQL code in Microsoft's SQL Server.

Comments
  • By the way, it seems to be in UTC time, but you'll want to make sure.
  • Thanks very much. I'm wondering why Microsoft made it that difficult for the expire date. Puzzle...
  • It is actually the number of ticks since 1601-01-01, not 1601-01-02.
  • When I look at Active Directory Users & Computers at the "Account Expires" date, and compare it with this, I need to use 1600-12-30 to make it match. (then again, per the referenced article "It is common for the values to differ by a day, sometimes even two days.")
  • Yeah, I noticed that. But I am wondering is there any better or direct way to convert it. Thanks for the advice.