1

Мне нужно экспортировать поле lastlogon моих доменных компьютеров. Я использовал эту команду:

dsquery * domainroot -filter "(&(objectCategory=Computer)(
objectClass=User))" -attr distinguishedName sAMAccountName lastLogon

Это было экспортировано в текстовый файл, моя проблема в том, что поле lastlogon представляет собой целую временную метку, а не дату. Например, это значение: 130931011681543000, но я не могу распознать эти значения как дату. Это не unixtimestamp, миллис от 1900/1/1 ... как преобразовать эти значения в читаемую дату?

1 ответ1

1

Я нашел его, это объект FILETIME, и я мог бы преобразовать его с помощью макроса Excel:

Вариант Явный

Закрытый тип FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type

Закрытый тип SYSTEMTIME wYear как целое число wMonth как целое число wDayOfWeek как целое число wDay как целое число wHour как целое число wMinute как целое число wSecond как целое число wMilliseconds как целое число конец

Закрытое Объявление функции FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long

Function ConvertDate(test)
    ConvertDate = Bit64ToDate(test)
    '4/26/2010 8:32:27 PM
End Function

Private Function Bit64ToDate(Bit64) As Date
    Dim High As Long, Low As Long, ft As FILETIME, st As SYSTEMTIME

    GetTwoLongsFromInt64 [Bit64], ft.dwHighDateTime, ft.dwLowDateTime

    FileTimeToSystemTime ft, st
    Bit64ToDate = SystemTimeToVBTime(st)
End Function

'the following function - thanks to
'http://doc.xceedsoft.com/products/Xceedzip/64_bit_values.html
Private Sub GetTwoLongsFromInt64(ByVal cInt64 As Double, ByRef lHigh As Long, ByRef lLow As Long)
    Dim cRemainder As Double

    lHigh = CLng(Fix(cInt64 / 4294967296#))
    cRemainder = cInt64 - (lHigh * 4294967296#)

    If (cRemainder <= 2147483647#) Then
        lLow = CLng(cRemainder)
    Else
        cRemainder = cRemainder - 4294967296#
        lLow = (CLng(cRemainder))
    End If
End Sub

'the following function - thanks to
'http://www.cpearson.com/excel/FileTimes.htm
Private Function SystemTimeToVBTime(SysTime As SYSTEMTIME) As Date
    With SysTime
        SystemTimeToVBTime = DateSerial(.wYear, .wMonth, .wDay) + _
                TimeSerial(.wHour, .wMinute, .wSecond)
    End With
End Function

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .