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
