Unix zaman damgaları, Unix epoku—1 Ocak 1970, 00:00:00 Koordine Evrensel Zaman (UTC)—dan itibaren geçen saniye sayısını temsil eder. Tarih ve saatleri verimli bir şekilde temsil etmek için uygulamalarda ve API’lerde yaygın olarak kullanılırlar. Bu makale, C#’ta bir Unix zaman damgası elde etmenin çeşitli yollarını inceleyerek, bunların etkinliklerini ve okunabilirliklerini karşılaştırmaktadır.
İçindekiler
DateTimeOffset
ile Unix Zaman Damgasını Etkin Bir Şekilde AlmaDateTime
veTimeSpan
KullanmaTimeSpan
ile Daha Manuel Bir Yaklaşım- Sonuç ve En İyi Uygulamalar
DateTimeOffset
ile Unix Zaman Damgasını Etkin Bir Şekilde Alma
En basit ve önerilen yöntem, DateTimeOffset
yapısının yerleşik ToUnixTimeSeconds()
metodunu kullanır:
using System;
public class UnixTimestamp
{
public static long GetUnixTimestamp()
{
return DateTimeOffset.Now.ToUnixTimeSeconds();
}
public static void Main(string[] args)
{
long timestamp = GetUnixTimestamp();
Console.WriteLine($"Unix zaman damgası: {timestamp}");
}
}
DateTimeOffset
, zaman dilimi bilgilerini açıkça ele aldığı için zaman dilimi dönüşümlerinden kaynaklanabilecek olası hataları önlediği için DateTime
‘den tercih edilir. Bu yöntem özlü, verimli ve olası sınır durumlarını kolayca ele alır.
DateTime
ve TimeSpan
Kullanma
Bu yöntem, geçerli zaman ile Unix epoku arasındaki farkı hesaplamak için DateTime
ve TimeSpan
kullanır:
using System;
public class UnixTimestamp
{
public static long GetUnixTimestamp()
{
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)(DateTime.UtcNow - unixEpoch).TotalSeconds;
}
public static void Main(string[] args)
{
long timestamp = GetUnixTimestamp();
Console.WriteLine($"Unix zaman damgası: {timestamp}");
}
}
Bu yaklaşım biraz daha ayrıntılıdır, ancak yine de oldukça okunabilir ve verimlidir. DateTimeKind.Utc
kullanımı doğruluk için çok önemlidir.
TimeSpan
ile Daha Manuel Bir Yaklaşım
Bu, önceki yöntemlerden daha az verimli olsa da, TimeSpan
kullanarak daha manuel bir hesaplamayı göstermektedir:
using System;
public class UnixTimestamp
{
public static long GetUnixTimestamp()
{
TimeSpan timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)timeSpan.TotalSeconds;
}
public static void Main(string[] args)
{
long timestamp = GetUnixTimestamp();
Console.WriteLine($"Unix zaman damgası: {timestamp}");
}
}
İşlevsel olsa da, bu yöntem daha özlü değildir ve diğer yaklaşımlara göre önemli bir avantaj sağlamaz.
Sonuç ve En İyi Uygulamalar
Üç yöntem de Unix zaman damgaları üretir, ancak DateTimeOffset.Now.ToUnixTimeSeconds()
en verimli, okunabilir ve önerilen yaklaşımdır. Yerleşiktir, zaman dilimlerini doğru şekilde ele alır ve kod karmaşıklığını en aza indirir. Çoğu senaryoda bu yöntem, performans ve sürdürülebilirlik arasında en iyi dengeyi sunar. Belirsizliği önlemek ve farklı zaman dilimlerinde tutarlı sonuçlar sağlamak için her zaman UTC zamanını kullanmayı unutmayın. Son derece büyük zaman damgaları (gelecekteki uzak tarihler) için, olası taşma sorunlarını önlemek üzere daha büyük bir tamsayı türü kullanmayı düşünün.