f124597a56
git-svn-id: file:///home/svn/framework3/trunk@5773 4d416f70-5f16-0410-b530-b9f4589650da
27 lines
846 B
Ruby
27 lines
846 B
Ruby
require 'ole/base'
|
|
|
|
module Ole # :nodoc:
|
|
# FIXME
|
|
module Types
|
|
# Parse two 32 bit time values into a DateTime
|
|
# Time is stored as a high and low 32 bit value, comprising the
|
|
# 100's of nanoseconds since 1st january 1601 (Epoch).
|
|
# struct FILETIME. see eg http://msdn2.microsoft.com/en-us/library/ms724284.aspx
|
|
def self.load_time str
|
|
low, high = str.unpack 'L2'
|
|
time = EPOCH + (high * (1 << 32) + low) * 1e-7 / 86400 rescue return
|
|
# extra sanity check...
|
|
unless (1800...2100) === time.year
|
|
Log.warn "ignoring unlikely time value #{time.to_s}"
|
|
return nil
|
|
end
|
|
time
|
|
end
|
|
|
|
# turn a binary guid into something displayable.
|
|
# this will probably become a proper class later
|
|
def self.load_guid str
|
|
"{%08x-%04x-%04x-%02x%02x-#{'%02x' * 6}}" % str.unpack('L S S CC C6')
|
|
end
|
|
end
|
|
end |