تمثل طوابع زمن يونكس عدد الثواني المنقضية منذ عصر يونكس – 1 يناير 1970، الساعة 00:00:00 بتوقيت غرينتش (UTC). تُستخدم على نطاق واسع في التطبيقات وواجهات برمجة التطبيقات لتمثيل التواريخ والأوقات بكفاءة. تستكشف هذه المقالة عدة طرق للحصول على طابع زمن يونكس في C#، مع مقارنة فعاليتها وسهولة قراءتها.
جدول المحتويات
- الحصول على طابع زمن يونكس بكفاءة باستخدام
DateTimeOffset
- استخدام
DateTime
وTimeSpan
- نهج يدوي أكثر مع
TimeSpan
- الخاتمة وأفضل الممارسات
الحصول على طابع زمن يونكس بكفاءة باستخدام DateTimeOffset
الطريقة الأكثر مباشرة و الموصى بها تعتمد على الأسلوب المُدمج ToUnixTimeSeconds()
الخاص بهيكل البيانات DateTimeOffset
:
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 timestamp: {timestamp}");
}
}
يُفضل استخدام DateTimeOffset
على DateTime
لأنه يعالج معلومات المنطقة الزمنية صراحةً، مما يمنع الأخطاء المحتملة الناتجة عن تحويلات المنطقة الزمنية. هذه الطريقة موجزة وفعالة، وتتعامل بسهولة مع الحالات الحدية المحتملة.
استخدام DateTime
و TimeSpan
تستخدم هذه الطريقة DateTime
و TimeSpan
لحساب الفرق بين الوقت الحالي وعصر يونكس:
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 timestamp: {timestamp}");
}
}
هذا النهج أكثر تفصيلاً قليلاً ولكنه لا يزال واضحاً وفعالاً. يُعد استخدام DateTimeKind.Utc
ضروريًا للدقة.
نهج يدوي أكثر مع TimeSpan
يُوضح هذا حسابًا يدويًا أكثر باستخدام TimeSpan
، على الرغم من أنه أقل كفاءة من الطرق السابقة:
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 timestamp: {timestamp}");
}
}
على الرغم من وظيفتها، إلا أن هذه الطريقة أقل إيجازًا ولا تقدم أي مزايا كبيرة على النهج الأخرى.
الخاتمة وأفضل الممارسات
تُنشئ جميع الطرق الثلاث طوابع زمن يونكس، لكن DateTimeOffset.Now.ToUnixTimeSeconds()
هي الطريقة الأكثر كفاءة وسهولة في القراءة والموصى بها. فهي مدمجة، وتتعامل مع المناطق الزمنية بشكل صحيح، وتُقلل من تعقيد التعليمات البرمجية. بالنسبة لمعظم السيناريوهات، توفر هذه الطريقة أفضل توازن بين الأداء والصيانة. تذكر دائمًا استخدام توقيت غرينتش (UTC) لتجنب الغموض وضمان نتائج متسقة عبر المناطق الزمنية المختلفة. بالنسبة لطوابع الزمن الكبيرة جدًا (التواريخ البعيدة في المستقبل)، ضع في اعتبارك استخدام نوع عدد صحيح أكبر لمنع مشكلات تجاوز السعة المحتملة.