ค้นหาเว็บไซต์

PowerShell แปลง Epoch Time เป็น DateTime [3 วิธี]


ก่อนที่จะไปสู่แนวทางแก้ไขปัญหาต่างๆ เพื่อแปลงเวลา Epoch เป็น Datetime สิ่งสำคัญคือต้องทราบเวลา Epoch เวลายุค เวลา POSIX หรือเวลายูนิกซ์เป็นระบบสำหรับแสดงจุดในเวลาเป็นตัวเลขตัวเดียว ตัวเลขเดี่ยวนี้คือจำนวนวินาที (ไม่นับวินาทีกระโดด) ที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970 เวลา 00:00:00 UTC (เวลาสากลเชิงพิกัด)

เหตุใดเวลา Unix Epoch จึงจำเป็น โดยทั่วไปจะใช้ในภาษาโปรแกรมและระบบคอมพิวเตอร์เพื่อแสดงและจัดการเวลาและวันที่ ช่วยให้การคำนวณเวลาและวันที่ง่ายขึ้นโดยการแสดงตัวเลขเพียงตัวเดียวที่ระบุจุดในเวลา และยังช่วยให้เราเปรียบเทียบวันที่และเวลากับระบบและเขตเวลาต่างๆ

คำถามอื่นที่คุณอาจมีคือ ตัวเลขดังกล่าวจะเป็นจำนวนเต็มหรือทศนิยมที่แสดงถึงเวลายุค มันสามารถเป็นอย่างใดอย่างหนึ่งได้ เวลา Epoch อาจเป็นตัวเลขทศนิยมหรือจำนวนเต็มขึ้นอยู่กับระบบและภาษาการเขียนโปรแกรม มาต่อด้วยวิธีแก้ปัญหาต่างๆ เพื่อแปลงเวลา Epoch เป็น DateTime

ใช้วิธี AddSeconds() ของคลาส DateTime

ใช้เมธอด AddSeconds() ของคลาส DateTime เพื่อแปลงเวลา Epoch เป็น DateTime ใน PowerShell

ใช้ AddSeconds() วิธีการของคลาส DateTime:

$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 ซึ่งเป็นค่าเวลา Epoch ต่อไป เราใช้ New-Object cmdlet เพื่อสร้างวัตถุ DateTime ด้วยพารามิเตอร์ 1970,1,1,0,0,0 ซึ่ง แสดงถึงจุดเริ่มต้นของเวลา Epoch (เรียกอีกอย่างว่า Unix Epoch) สุดท้าย ด้วยออบเจ็กต์ DateTime เราได้เชื่อมโยงเมธอด AddSeconds() ซึ่งใช้ $epochTime เป็นพารามิเตอร์

วิธีการนี้ใช้เพื่อเพิ่มค่าของ $epochTime ให้กับออบเจ็กต์ DateTime เพื่อรับออบเจ็กต์ DateTime ใหม่ที่แสดงวันที่และเวลาที่มนุษย์สามารถอ่านได้ที่สอดคล้องกัน ไปยังค่าเวลา Epoch ที่ระบุ สุดท้าย เราใช้ Write-Output cmdlet เพื่อพิมพ์ค่าของตัวแปร $dateTimeObject บนคอนโซล PowerShell

อย่าตกใจหากคุณได้รับเอาต์พุตอื่น เนื่องจากเอาต์พุตสำหรับโค้ดข้างต้นขึ้นอยู่กับการตั้งค่าโซนเวลาของระบบของคุณ

สคริปต์ทางเลือกของข้างต้นได้รับด้านล่าง

ใช้ AddSeconds() วิธีการของคลาส DateTime:

$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()

ใช้ Get-Date cmdlet ด้วยเมธอด AddSeconds() เพื่อแปลงเวลา Epoch เป็น DateTime ใน PowerShell

ใช้ 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 เพื่อรับวันที่และเวลาปัจจุบัน และเพิ่ม $epochTime โดยใช้เมธอด AddSeconds() เพื่อ รับวัตถุ DateTime ซึ่งเราเก็บไว้ในตัวแปร $dateTimeObject นอกจากนี้ เรายังใช้ Write-Output cmdlet เพื่อแสดงค่าบนคอนโซล PowerShell

ในตัวอย่างข้างต้น จุดเริ่มต้นของเวลายุคคือวันที่ปัจจุบันตามระบบและเขตเวลาของคุณ

การใช้ Get-Date Cmdlet กับไลบรารี System.TimeSpan

นอกจากนี้เรายังสามารถใช้ Get-Date cmdlet กับ System.TimeSpan ซึ่งเป็นไลบรารีคลาส Microsoft .NET เพื่อแปลงเวลา 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 วัตถุ นอกจากนี้ เรายังเพิ่มจำนวนวินาทีที่แสดงโดย $epochTime เข้าไปโดยใช้เมธอด TimeSpan.FromSeconds() แล้วจุดเริ่มต้นของยุคสมัยที่นี่คืออะไร? ใช่ คุณเข้าใจถูกแล้ว! จุดเริ่มต้นของเวลา Epoch คือ 01-01-1970

จนถึงจุดนี้ Epoch Timestamp ได้ถูกพรากไปจากอดีต จะเป็นอย่างไรหากเราต้องการทำงานกับ Epoch Timestamp ปัจจุบัน ในกรณีนั้น เราสามารถใช้วิธีแก้ปัญหาต่อไปนี้

แปลงเวลายุคปัจจุบันเป็น DateTime

หากต้องการแปลงเวลา Epoch จริง (ปัจจุบัน) เป็น DateTime ที่มนุษย์สามารถอ่านได้:

  • ใช้ cmdlet Get-Date พร้อมด้วยพารามิเตอร์ -UFormat เพื่อรับเวลา Epoch ปัจจุบัน
  • ใช้คลาส System.DateTimeOffset เพื่อแปลงเวลา Epoch ข้างต้นเป็น DateTime ปกติ

แปลงการประทับเวลา 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; คำสั่งนี้ส่งคืนเวลาปัจจุบันตามจำนวนวินาทีที่ผ่านไปนับตั้งแต่ 1 มกราคม 1970, 00:00:00 UTC ซึ่งเป็นเวลา Unix Epoch ต่อไป เราได้กำหนดเวลา Epoch นี้ให้กับตัวแปร $epochTime

ต่อไป เราใช้เมธอด FromUnixTimeSeconds() ของคลาส System.DateTimeOffset เพื่อแปลงเวลา Epoch ที่ดึงข้อมูลไปเป็นอ็อบเจ็กต์ DateTimeOffset ซึ่งแสดงถึงการเริ่มต้น ตรงเวลาด้วยออฟเซ็ตจาก UTC

หลังจากนั้น เราเข้าถึงคุณสมบัติ DateTime ของวัตถุ DateTimeOffset เพื่อรับวัตถุ DateTime ที่สอดคล้องกัน ซึ่งแสดงถึงจุดเริ่มต้นเดียวกันในเวลา แต่ไม่มี ชดเชย สุดท้ายนี้ จุดเริ่มต้นในเวลานี้ถูกจัดเก็บไว้ในตัวแปร $dateTimeObject ซึ่งเราใช้กับ cmdlet Write-Output เพื่อพิมพ์ค่าบนคอนโซล PowerShell

เราสามารถทำให้เอาท์พุตด้านบนอ่านง่ายขึ้นโดยการผูกมัดเมธอด ToString() ด้วย $dateTimeObject; ดูตัวอย่างต่อไปนี้ ToString() วิธีการไม่ทำอะไรเลยนอกจากแปลงเป็นประเภท String

แปลงการประทับเวลา Epoch ปัจจุบันเป็น DateTime ที่มนุษย์สามารถอ่านได้:

$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

บทความที่เกี่ยวข้อง