فصل 30 از 40 درس 1 از 1

تاریخ و زمان

تاریخ و زمان

بخشی از آموزش جامع 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 محاسبه کند.

۱۰. جمع‌بندی

در این فصل، مبانی «تاریخ و زمان» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.