تاریخ و زمان
تاریخ و زمان
بخشی از آموزش جامع C# و .NET 10
محتوای درس تاریخ و زمان
کار با تاریخ و زمان فقط نمایش DateTime نیست. تفاوت زمان محلی و UTC، TimeSpan، فرمتبندی و محاسبات زمانی باید از ابتدا صحیح طراحی شوند.
۱. DateTime
DateTime تاریخ و زمان را نگه میدارد و Kind آن میتواند Local، Utc یا Unspecified باشد.
مثال
DateTime now=DateTime.UtcNow; Console.WriteLine(now.AddDays(7));در این مثال، مفهوم «DateTime» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۲. DateTimeOffset
برای Timestampهای بینسیستمی معمولاً DateTimeOffset انتخاب مطمئنتری است زیرا Offset را نیز نگه میدارد.
مثال
DateTimeOffset now=DateTimeOffset.Now; Console.WriteLine(now.UtcDateTime);در این مثال، مفهوم «DateTimeOffset» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۳. TimeSpan
TimeSpan یک بازه زمانی را مدل میکند و برای اختلاف دو زمان یا مدت عملیات مناسب است.
مثال
TimeSpan d=TimeSpan.FromMinutes(90); Console.WriteLine(d.TotalHours);در این مثال، مفهوم «TimeSpan» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۴. فرمت و Parse
ToString با Format String نمایش را کنترل میکند. ParseExact و TryParseExact برای ورودی با قالب مشخص کاربرد دارند.
مثال
string s=DateTime.UtcNow.ToString("O");
DateTime.TryParse("2026-08-20",out var d);در این مثال، مفهوم «فرمت و Parse» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۵. UTC
در سیستمهای توزیعشده بهتر است زمان ذخیرهسازی و تبادل بر مبنای UTC باشد و تبدیل برای نمایش در مرز UI انجام شود.
مثال
DateTime utc=DateTime.UtcNow; DateTime local=utc.ToLocalTime();در این مثال، مفهوم «UTC» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۶. مثالهای عملی
DateTimeOffset now = DateTimeOffset.UtcNow;
DateTimeOffset expiresAt = now.AddHours(2);
TimeSpan remaining = expiresAt - now;
Console.WriteLine(now.ToString("O"));
Console.WriteLine(remaining.TotalMinutes);این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
۷. خطاهای رایج
• ذخیره زمان Local در سیستم چندمنطقهای
• استفاده از string بهعنوان مدل داخلی تاریخ
• نادیده گرفتن Time Zone و Offset
۸. نکات اجرایی
• نامها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.
• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.
• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.
۹. تمرین عملی
سیستم ساده انقضای Token بسازید که زمان ایجاد، زمان انقضا و مدت باقیمانده را با DateTimeOffset محاسبه کند.
۱۰. جمعبندی
در این فصل، مبانی «تاریخ و زمان» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصلهای بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم میکند.