Cpt*_*ale 26 powershell date-time timestamp conversion office365
Microsoft Office 365 在注册表中保存有关上次搜索/下载/应用更新时间的信息,格式如下:
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\office\ClickToRun\Updates' | select *time
UpdateDetectionLastRunTime : 13335538464958
UpdatesAppliedTime : 13335413795690
DownloadTime : 13335365916104
UpdatesDiscoveryPeriodStartTime : 13259087464032
UpdatesBlockedTime : 0
Run Code Online (Sandbox Code Playgroud)
这种格式是什么?它如何转换为标准日期/时间?
Mok*_*bai 37
这些数字是自Windows Epoch Time(从 1601 年 1 月 1 日开始)以来的时间戳,以毫秒间隔计数。
从 Microsoft 页面如何将 Active Directory 中的日期/时间属性转换为标准时间格式:
Active Directory 将日期/时间值存储为从 1601 年 1 月 1 日 0 点到所存储的日期/时间之间经过的 100 纳秒间隔数。
win32tm上页描述了可以为您执行此转换的内置命令。由于您的办公时间以毫秒为单位存储,而此命令需要纳秒,因此我们需要在值末尾附加 4 个零,以获得“完整”的 18 位时间戳代码:
w32tm /ntte 133355384649580000
154346 12:14:24.9580000 - 03/08/2023 13:14:24
Run Code Online (Sandbox Code Playgroud)
由于完整的 18 位值自 Windows Epoch 起使用 100ns 时间间隔,因此通过从末尾删除 4 位数字,可以将精度从 100ns 间隔降低到毫秒间隔。您可能永远不会注意到精度的降低。
您可以使用在线转换器(例如LDAP、Active Directory 和 Filetime Timestamp Converter)验证从您拥有的数字进行的转换,但您再次需要0在字符串末尾添加四个 s 以获得正确的 18 位值。
Des*_*666 22
要添加@Mokubai的答案,在PowerShell中执行此操作的方法(我认为这里需要这种方法)是使用FromFileTime函数,例如:
$time = 13335538464958
$dateTime = [DateTime]::FromFileTime($time * 10000)
Run Code Online (Sandbox Code Playgroud)
这使用当地时间,也有FromFileTimeUtc使用 UTC 时间的。
| 归档时间: |
|
| 查看次数: |
4679 次 |
| 最近记录: |