c# كيف يمكنني تحويل أوتك إلى يست أو بدت اعتمادا على ما هو الوقت الحالي في ولاية كاليفورنيا؟



.net timezone (1)

لا أستطيع استخدام DateTime.Now لأن الملقم لا يقع بالضرورة في كالفورنيا


خيارين:

1) استخدام TimeZoneInfo و DateTime :

using System;

class Test
{
    static void Main()
    {
        // Don't be fooled - this really is the Pacific time zone,
        // not just standard time...
        var zone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
        var utcNow = DateTime.UtcNow;
        var pacificNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, zone);

        Console.WriteLine(pacificNow);
    }
}

2) استخدام مشروع نودا تايم :)

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        // TZDB ID for Pacific time
        DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
        // SystemClock implements IClock; you'd normally inject it
        // for testability
        Instant now = SystemClock.Instance.Now;

        ZonedDateTime pacificNow = now.InZone(zone);        
        Console.WriteLine(pacificNow);
    }
}

من الواضح أنا متحيز، ولكني أفضل استخدام نودا الوقت، في المقام الأول لثلاثة أسباب:

  • يمكنك استخدام معلومات المنطقة الزمنية تزدب، والتي هي أكثر المحمولة خارج ويندوز. (يمكنك استخدام المناطق المستندة إلى بكل أيضا.)
  • هناك أنواع مختلفة لأنواع مختلفة من المعلومات، والتي تتجنب شذوذ DateTime تحاول تمثيل ثلاثة أنواع مختلفة من القيمة، وعدم وجود مفهوم لمجرد تمثيل "تاريخ" أو "وقت من اليوم"
  • انها مصممة مع قابلية الاختبار في الاعتبار




timezone