its in this format:
128002727440808261
How do I convert this to something more…nice???
Leave it to Microsoft to come up with something this convoluted:
http://www.microsoft.com/technet/scriptcenter/topics/win2003/lastlogon.m
spx
This seems to work:
require ‘date’
last_logon = 128002727440808261
base = Date.new(1601, 1, 1)
base += last_logon / (60 * 10000000 * 1440)
p base.to_s # “2006-08-17”
Regards,
Dan
This communication is the property of Qwest and may contain confidential
or
privileged information. Unauthorized use of this communication is
strictly
prohibited and may be unlawful. If you have received this communication
in error, please immediately notify the sender by reply e-mail and
destroy
all copies of the communication and any attachments.
Amazing…
Thanks a bunch
Mikkel
On Friday, August 18, 2006, at 3:03 AM, Berger, Daniel wrote:
its in this format:
Dan
This communication is the property of Qwest and may contain confidential or
privileged information. Unauthorized use of this communication is strictly
prohibited and may be unlawful. If you have received this communication
in error, please immediately notify the sender by reply e-mail and destroy
all copies of the communication and any attachments.
Mikkel B.
www.strongside.dk - Football Portal(DK)
ting.minline.dk - Buy Old Stuff!(DK)
Berger, Daniel wrote:
Leave it to Microsoft to come up with something this convoluted:
What could possibly be less convoluted than keeping time as a
high resolution (in this case, 100ns) integer since some epoch?
It’s actually the perfect way to handle time, and I thought
that (and implemented it) long before I knew MS had done it.
On 8/18/06, Clifford H. [email protected] wrote:
Berger, Daniel wrote:
Leave it to Microsoft to come up with something this convoluted:
What could possibly be less convoluted than keeping time as a
high resolution (in this case, 100ns) integer since some epoch?
It’s actually the perfect way to handle time, and I thought
that (and implemented it) long before I knew MS had done it.
Check the NTP protocol. This sounds like the format used by NTP servers.
Daniel M. wrote:
“Berger, Daniel” [email protected] writes:
Leave it to Microsoft to come up with something this convoluted:
At least their time 0 is close to the beginning of a century
Actually it’s at the beginning of a century.
Hal
How did you get the lastlogontimestamp attribute into integer format?
Retrieving myuser.lastLogonTimestamp always gives me:
#WIN32OLE:0x6e39ee0
Which I have no idea how to deal with.
Thanks,
Charles L.
For just documentation purposes - here is some dirty sample code on how
to get a Ruby DateTime from Active Directory:
require ‘win32ole’
require ‘date’
AD4Ruby
require ‘./ad4r/config.rb’
Import namespace for AD4R
include ActiveDirectory
myuser = User.find_by_logon(‘cll13291’)
highpart = myuser.ldap_object.send(“Get”, “lastLogon” ).HighPart
lowpart = myuser.ldap_object.send(“Get”, “lastLogon” ).LowPart
puts "HighPart: " + highpart.to_s
puts "LowPart: " + lowpart.to_s
intLogonTime = highpart * (2**32) + lowpart
puts intLogonTime
intLogonFloat = intLogonTime.to_f / (60 * 10000000 * 1440).to_f
puts “%.9f” % intLogonFloat
last_logon = intLogonFloat
base = DateTime.new(1601,1,1,0,0,0)
base += intLogonFloat
p base
p base.to_s # “2006-08-17T12:37:10Z”
“Berger, Daniel” [email protected] writes:
Leave it to Microsoft to come up with something this convoluted:
At least their time 0 is close to the beginning of a century, the
beginning of a year, and the beginning of the week. (if you begin
weeks on a Monday) They could have chosen to fill their 64-bit time
value with 100ns offsets from 00:00 17-NOV-1858, which isn’t even at
the beginning of anybody’s week. (It’s a Wednesday)
Microsoft even seems to have gone with a pre-existing external
standard in this case.
Parenthetical note:
The date in 1858 is VMS’s time zero - in this case it was also a
pre-existing standard that was followed, based on what astronomers
using computers to track Sputnik used for their time values - see
http://www3.sympatico.ca/n.rieck/docs/calendar_time_y2k_etc.html#nov-17-1858
See also the bottom of rfc868:
http://www.cse.ohio-state.edu/cgi-bin/rfc/rfc868.html
I want to know what systems had time clocks starting 1 Jan 1976; I
assume the 1 May 1983 date is related to the publication date of the
RFC.
I found the following code a bit clearer, but YMMV; this was running
under Linux & just grabbing lastLogin via LDAP.
HTH,
-b
constants for converting to/from AD’s wacky time format
#http://www.irishdev.com/blogs/jbrennan/archive/2005/09/02/973.aspx
was helpful in figuring this out
AD_EPOCH = 116_444_736_000_000_000
AD_MULTIPLIER = 10_000_000
convert a Time object to AD’s epoch
def time2ad(time)
(time.to_i * AD_MULTIPLIER) + AD_EPOCH
end
convert from AD’s time string to a Time object
def ad2time(time)
Time.at((time.to_i - AD_EPOCH) / AD_MULTIPLIER)
end
1 Like