PowerShell Epoch Saatini DateTime'a Dönüştürme [3 Yol]


Epoch zamanını Datetime'a dönüştürmek için çeşitli çözümlere geçmeden önce Epoch zamanını bilmek önemlidir. Epoch zamanı, POSIX zamanı veya Unix zamanı, zamandaki bir noktayı tek bir sayıya belirtmek için kullanılan sistemdir. Bu tek sayı, 1 Ocak 1970, 00:00:00 UTC'den (Koordineli Evrensel Zaman) bu yana geçen saniye sayısıdır (artık saniyeleri saymaz).

Unix Epoch zamanı neden gereklidir? Programlama dillerinde ve bilgisayar sistemlerinde saatleri ve tarihleri belirtmek ve değiştirmek için yaygın olarak kullanılır. Zamandaki bir noktayı belirten tek bir sayıyı temsil ederek Saat ve Tarih hesaplamalarını basitleştirir; aynı zamanda tarih ve saati çeşitli sistemler ve saat dilimleriyle karşılaştırmamıza da olanak tanır.

Aklınıza gelebilecek başka bir soru da, sayının Epoch zamanını temsil eden bir tam sayı mı yoksa kayan nokta mı olacağıdır. Her ikisi de olabilir. Dönem süresi, sisteme ve programlama diline bağlı olarak kayan noktalı bir sayı veya bir tam sayı olabilir. Epoch zamanını DateTime'a çevirmek için çeşitli çözümlerle devam edelim.

DateTime Sınıfının AddSeconds() Yöntemini Kullanma

PowerShell'de Epoch saatini DateTime'a dönüştürmek için DateTime sınıfının AddSeconds() yöntemini kullanın.

DateTime Sınıfının AddSeconds() Yöntemini kullanın:

$epochTime = 1615395869
$dateTimeObject = (New-Object DateTime 1970,1,1,0,0,0).AddSeconds($epochTime)
Write-Output $dateTimeObject

ÇIKTI:

Wednesday, March 10, 2021 5:04:29 PM

Öncelikle $epochTime değişkenini tanımladık ve onu bir Epoch zaman değeri olan 1615395869 değeriyle başlattık. Daha sonra, 1970,1,1,0,0,0 parametreleriyle bir DateTime nesnesi oluşturmak için New-Object cmdlet'ini kullandık. Epoch zamanının başlangıç noktasını belirtir (Unix Epoch olarak da bilinir). Son olarak DateTime nesnesi ile parametre olarak $epochTime alan AddSeconds() yöntemini zincirledik.

Bu yöntem, karşılık gelen insan tarafından okunabilen tarih ve saati gösteren yeni bir DateTime nesnesi elde etmek amacıyla DateTime nesnesine $epochTime değerini eklemek için kullanıldı. belirtilen Epoch zaman değerine. Son olarak PowerShell konsolunda $dateTimeObject değişkeninin değerini yazdırmak için Write-Output cmdlet'ini kullandık.

Yukarıdaki kodun çıktısı sisteminizin saat dilimi ayarlarına bağlı olduğundan farklı bir çıktı alırsanız paniğe kapılmayın.

Yukarıdakilere alternatif bir komut dosyası aşağıda verilmiştir.

DateTime Sınıfının AddSeconds() Yöntemini kullanın:

$epochTime = 1615395869
$originOfEpochTime = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
$dateTimeObject = $originOfEpochTime.AddSeconds($epochTime)
Write-Output $dateTimeObject

ÇIKTI:

Wednesday, March 10, 2021 5:04:29 PM

Burada oluşturmak istediğimiz nesnenin tipini belirtmek için -Type parametresini kullandık ve -ArgumentList parametresini kullanarak argümanların listesini belirttik.

Get-Date Cmdlet'ini AddSeconds() Yöntemiyle Kullanma

PowerShell'de Epoch saatini DateTime'a dönüştürmek için AddSeconds() yöntemiyle Get-Date cmdlet'ini kullanın.

Get-Date Cmdlet'ini AddSeconds() Yöntemiyle kullanın:

$epochTime = 1615395869
$dateTimeObject = (Get-Date).AddSeconds($epochTime)
Write-Output $dateTimeObject

ÇIKTI:

Sunday, May 20, 2074 3:10:20 AM

Bu örnek önceki bölümde sunulan örneğe benzer. Burada, geçerli tarih ve saati almak için Get-Date cmdlet'ini kullandık ve buna AddSeconds() yöntemini kullanarak $epochTime'ı ekledik. $dateTimeObject değişkeninde sakladığımız bir DateTime nesnesi alın. Ayrıca, değerini PowerShell konsolunda görüntülemek için Write-Output cmdlet'ini kullandık.

Yukarıdaki örnekte Epoch saatinin başlangıç noktası, sisteminize ve saat diliminize göre geçerli tarihti.

Get-Date Cmdlet'ini System.TimeSpan kitaplığıyla kullanma

Belirtilen Epoch zamanını insanlar tarafından okunabilen tarih ve saate dönüştürmek için bir Microsoft .NET sınıf kütüphanesi olan System.TimeSpan ile Get-Date cmdlet'ini de kullanabiliriz. Aşağıdaki örneğe bakın.

Get-Date Cmdlet'ini System.TimeSpan ile kullanın:

$epochTime = 1615395869
$dateTimeObject = (Get-Date -Date "01-01-1970") +
                  ([System.TimeSpan]::FromSeconds(($epochTime)))
Write-Output $dateTimeObject

ÇIKTI:

Wednesday, March 10, 2021 5:04:29 PM

Burada, DateTime oluşturmak için 01-01-1970 olarak ayarlanan -Date parametresiyle Get-Date'i kullandık. nesnesi. Ayrıca, TimeSpan.FromSeconds() yöntemini kullanarak $epochTime ile temsil edilen saniye sayısını ekledik. Peki burada Epoch zamanının başlangıç noktası nedir? Evet, doğru anladın! Epoch zamanının başlangıç noktası 01-01-1970'dir.

Bu noktaya kadar Epoch Zaman Damgası geçmişten alınıyordu; Peki ya mevcut Epoch Zaman Damgası ile çalışmak istiyorsak? Bu durumda aşağıdaki çözümü kullanabiliriz.

Geçerli Dönem Saatini DateTime'a Dönüştür

Gerçek (geçerli) Epoch zamanını insan tarafından okunabilen DateTime'a dönüştürmek için:

  • Geçerli Epoch Saatini almak için Get-Date cmdlet'ini -UFormat parametresiyle birlikte kullanın.
  • Yukarıdaki Epoch saatini normal DateTime'a dönüştürmek için System.DateTimeOffset sınıfını kullanın.

Geçerli Dönem Zaman Damgasını İnsanların Okuyabileceği Tarih Saatine Dönüştür:

$epochTime = Get-Date -UFormat %s
$dateTimeObject = (([System.DateTimeOffset]::FromUnixTimeSeconds($epochTime)).DateTime)
Write-Output $dateTimeObject

ÇIKTI:

Sunday, March 12, 2023 10:40:18 AM

Yukarıdaki kodun ilk satırında değeri %s olarak ayarlanan -UFormat parametresi ile Get-Date'i kullandık; bu komut, geçerli zamanı, bir Unix Dönem Zamanı olan 1 Ocak 1970, 00:00:00 UTC'den bu yana geçen saniye sayısı olarak döndürdü. Daha sonra bu Epoch zamanını $epochTime değişkenine atadık.

Daha sonra, alınan Epoch zamanını bir başlangıç noktasını temsil eden bir DateTimeOffset nesnesine dönüştürmek için System.DateTimeOffset sınıfının FromUnixTimeSeconds() yöntemini kullandık. UTC'den farkla zamanda bir nokta.

Bundan sonra, zaman içinde aynı başlangıç noktasını belirten ancak karşılık gelen bir DateTime nesnesi elde etmek için DateTimeOffset nesnesinin DateTime özelliğine eriştik. telafi etmek. Son olarak, zamandaki bu başlangıç noktası, değerini PowerShell konsolunda yazdırmak için Write-Output cmdlet'iyle birlikte kullandığımız $dateTimeObject değişkeninde saklandı.

ToString() yöntemini $dateTimeObject ile zincirleyerek yukarıdaki çıktıyı daha okunaklı hale getirebiliriz; aşağıdaki örneğe bakın. ToString() yöntemi, String türüne dönüştürmekten başka bir şey yapmaz.

Geçerli Dönem Zaman Damgasını İnsanların Okuyabileceği Tarih Saatine Dönüştür:

$epochTime = Get-Date -UFormat %s
$dateTimeObject = (([System.DateTimeOffset]::FromUnixTimeSeconds($epochTime)).DateTime)
Write-Output $dateTimeObject.ToString()

ÇIKTI:

3/12/2023 10:43:21 AM

Hepsi PowerShell'in Epoch zamanını DateTime'a dönüştürmesiyle ilgili.

İlgili makaleler