PowerShell 将纪元时间转换为日期时间 [3 种方法]
在采用各种解决方案将纪元时间转换为日期时间之前,了解纪元时间至关重要。 Epoch 时间、POSIX 时间或 Unix 时间是用单个数字表示时间点的系统。这个数字是自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来经过的秒数(不包括闰秒)。
为什么需要 Unix 纪元时间?它通常用于编程语言和计算机系统中来表示和操作时间和日期。它通过表示指示时间点的单个数字来简化时间和日期的计算;它还允许我们将日期和时间与各种系统和时区进行比较。
您可能遇到的另一个问题是该数字是代表纪元时间的整数还是浮点数。可以是其中任何一个。 Epoch 时间可以是浮点数或整数,具体取决于系统和编程语言。让我们继续使用各种解决方案将纪元时间转换为 DateTime。
使用 DateTime 类的 AddSeconds() 方法
使用 DateTime 类的 AddSeconds() 方法将纪元时间转换为 PowerShell 中的 DateTime。
使用 DateTime 类的 AddSeconds() 方法:
$epochTime = 1615395869
$dateTimeObject = (New-Object DateTime 1970,1,1,0,0,0).AddSeconds($epochTime)
Write-Output $dateTimeObject输出 :
Wednesday, March 10, 2021 5:04:29 PM首先,我们定义了 $epochTime 变量,并使用 1615395869 值(纪元时间值)对其进行初始化。接下来,我们使用 New-Object cmdlet 创建一个带有 1970,1,1,0,0,0 参数的 DateTime 对象,该对象表示 Epoch 时间(也称为 Unix Epoch)的起点。最后,通过 DateTime 对象,我们链接了 AddSeconds() 方法,该方法将 $epochTime 作为参数。
此方法用于将 $epochTime 的值添加到 DateTime 对象,以获取新的 DateTime 对象,显示对应的人类可读日期和时间到指定的 Epoch 时间值。最后,我们使用 Write-Output cmdlet 在 PowerShell 控制台上打印 $dateTimeObject 变量的值。
如果您得到不同的输出,请不要惊慌,因为上述代码的输出取决于您系统的时区设置。
下面给出了上述脚本的替代脚本。
使用 DateTime 类的 AddSeconds() 方法:
$epochTime = 1615395869
$originOfEpochTime = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
$dateTimeObject = $originOfEpochTime.AddSeconds($epochTime)
Write-Output $dateTimeObject输出 :
Wednesday, March 10, 2021 5:04:29 PM在这里,我们使用 -Type 参数来提及我们想要创建的对象的类型,并使用 -ArgumentList 参数指定参数列表。
将 Get-Date Cmdlet 与 AddSeconds() 方法结合使用
在 PowerShell 中使用 Get-Date cmdlet 和 AddSeconds() 方法将纪元时间转换为 DateTime。
将 Get-Date Cmdlet 与 AddSeconds() 方法结合使用:
$epochTime = 1615395869
$dateTimeObject = (Get-Date).AddSeconds($epochTime)
Write-Output $dateTimeObject输出 :
Sunday, May 20, 2074 3:10:20 AM 此示例与上一节中提供的示例类似。在这里,我们使用 Get-Date cmdlet 获取当前日期和时间,并使用 AddSeconds() 方法将 $epochTime 添加到其中获取一个 DateTime 对象,我们将其存储在 $dateTimeObject 变量中。此外,我们使用 Write-Output cmdlet 在 PowerShell 控制台上显示其值。
在上面的示例中,大纪元时间的起点是基于您的系统和时区的当前日期。
将 Get-Date Cmdlet 与 System.TimeSpan 库结合使用
我们还可以将 Get-Date cmdlet 与 Microsoft .NET 类库 System.TimeSpan 结合使用,将指定的 Epoch 时间转换为人类可读的日期和时间。请参阅以下示例。
将 Get-Date Cmdlet 与 System.TimeSpan 结合使用:
$epochTime = 1615395869
$dateTimeObject = (Get-Date -Date "01-01-1970") +
([System.TimeSpan]::FromSeconds(($epochTime)))
Write-Output $dateTimeObject输出 :
Wednesday, March 10, 2021 5:04:29 PM在这里,我们使用 Get-Date 和 -Date 参数(设置为 01-01-1970)来创建 DateTime对象。此外,我们使用 。TimeSpan.FromSeconds() 方法将 $epochTime 表示的秒数添加到其中。那么,这里的大纪元时间的起点是什么呢?是的,你没看错!大纪元时间的起始点是01-01-1970
到目前为止,Epoch 时间戳是从过去获取的;如果我们想使用当前的纪元时间戳怎么办?在这种情况下,我们可以使用下面的解决方案。
将当前纪元时间转换为 DateTime
要将实际(当前)纪元时间转换为人类可读的 DateTime:
- 使用带有
-UFormat参数的Get-Datecmdlet 来获取当前纪元时间。 - 使用
System.DateTimeOffset类将上述Epoch时间转换为常规DateTime。
将当前纪元时间戳转换为人类可读的日期时间:
$epochTime = Get-Date -UFormat %s
$dateTimeObject = (([System.DateTimeOffset]::FromUnixTimeSeconds($epochTime)).DateTime)
Write-Output $dateTimeObject输出 :
Sunday, March 12, 2023 10:40:18 AM 在上述代码的第一行中,我们使用了 Get-Date 以及 -UFormat 参数,该参数的值设置为 %s;该命令返回当前时间,作为自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数,这是一个 Unix 纪元时间。接下来,我们将此 Epoch 时间分配给 $epochTime 变量。
接下来,我们使用 System.DateTimeOffset 类的 FromUnixTimeSeconds() 方法将检索到的 Epoch 时间转换为 DateTimeOffset 对象,表示起始时间与 UTC 存在偏移的时间点。
之后,我们访问 DateTimeOffset 对象的 DateTime 属性来获取对应的 DateTime 对象,表示相同的时间起点,但没有抵消。最后,这个起始时间点存储在 $dateTimeObject 变量中,我们将其与 Write-Output cmdlet 一起使用以在 PowerShell 控制台上打印其值。
我们可以通过将 ToString() 方法与 $dateTimeObject 链接起来,使上述输出更具可读性;请参见以下示例。 ToString() 方法什么也不做,只是转换为 String 类型。
将当前纪元时间戳转换为人类可读的日期时间:
$epochTime = Get-Date -UFormat %s
$dateTimeObject = (([System.DateTimeOffset]::FromUnixTimeSeconds($epochTime)).DateTime)
Write-Output $dateTimeObject.ToString()输出 :
3/12/2023 10:43:21 AM这就是 PowerShell 将 Epoch 时间转换为 DateTime 的全部内容。
