C# Programming

توليد أزمنة يونكس بكفاءة في C#

Spread the love

تمثل طوابع زمن يونكس عدد الثواني المنقضية منذ عصر يونكس – 1 يناير 1970، الساعة 00:00:00 بتوقيت غرينتش (UTC). تُستخدم على نطاق واسع في التطبيقات وواجهات برمجة التطبيقات لتمثيل التواريخ والأوقات بكفاءة. تستكشف هذه المقالة عدة طرق للحصول على طابع زمن يونكس في C#، مع مقارنة فعاليتها وسهولة قراءتها.

جدول المحتويات

الحصول على طابع زمن يونكس بكفاءة باستخدام 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) لتجنب الغموض وضمان نتائج متسقة عبر المناطق الزمنية المختلفة. بالنسبة لطوابع الزمن الكبيرة جدًا (التواريخ البعيدة في المستقبل)، ضع في اعتبارك استخدام نوع عدد صحيح أكبر لمنع مشكلات تجاوز السعة المحتملة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *