我想将Windows NT关闭时间转换为日期和时间:
88 33 9d cb 38 36 d0 01 --> 88339dcb3836d001 --> 22.01.2015 11:44:35 (UTC)
输入数据是64位十六进制值(8字节)。您可以在HKLM\SYSTEM\ControlSet001\Control\Windows --> Shutdown Time
下的Windows注册表中找到此值。该值包含上次关闭的时间和日期。该值的类型为FILETIME
- 一个64位时间值(十六进制值,小尾数),表示自UTC时间午夜1601年1月1日起100纳秒间隔的数量。
这可能通过shell(bash)吗?我想在shell脚本中实现它。
答案 0 :(得分:1)
正如问题中所写,Windows NT关闭时间是从1601年1月1日开始的100ns间隔计数。唯一的问题是时间戳编码为little-endian。解码时间戳并将其添加到时代在纯Bash中有点棘手,但如果你可以省去Python安装就变得相当容易。
以下是执行转换的脚本:
var requestUrl = "https://maps.google.com/maps/api/geocode/json?address=300+Collins+St,+Docklands,+VIC&sensor=false&components=country:AU";
$.getJSON(requestUrl).done(function(data) {
//extract locations
var locations = data.results.map(function(item){
return item.geometry.location;
});
//print locations
var output = JSON.stringify(locations, null, 2);
$("#output").text(output);
});
它接受64位值作为参数,并打印编码日期的区域设置表示:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre style="background-color: #c0c0c0" id="output"></pre>
如果您需要其他格式,请使用标准#! /usr/bin/python3
from __future__ import division
import struct
import sys
from binascii import unhexlify
from datetime import datetime, timedelta
nt_timestamp = struct.unpack("<Q", unhexlify(sys.argv[1]))[0]
epoch = datetime(1601, 1, 1, 0, 0, 0)
nt_datetime = epoch + timedelta(microseconds=nt_timestamp / 10)
print(nt_datetime.strftime("%c"))
格式说明符编辑最后一行。
答案 1 :(得分:0)
分享更多知识: - )
$regKey = Get-ItemProperty -Path
Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Windows
$shutDown = $regKey.ShutdownTime
$Int64Value = [System.BitConverter]::ToInt64($shutDown, 0)
$date = [DateTime]::FromFileTime($Int64Value)
$date
得到这个here