کار با تاریخ و زمان در سی شارپ

در سی شارپ برای بدست آوردن تاریخ و زمان از ساختار DateTime استفاده می شود که در فضای کاری System قرار دارد. ساختارها(struct) عملکردی نزدیک به کلاس دارند اما تفاوت هایی بین آنها وجود دارد که در مقاله ای جداگانه به بیان آنها خواهیم پرداخت. از DateTime برای کار با تاریخ میلادی استفاده می شود و به روش های مختلفی می توان از آن بهره برد.

تاریخ میلادی

ساختار DateTime به روش های مختلفی قابل استفاده می باشد. در ساده ترین حالت آن می توان بدون ساخت نمونه، از خاصیت Now استفاده نمود.

static void Main(string[] args)
{
    Console.WriteLine(DateTime.Now);
    Console.ReadLine();
}

خروجی این دستور نمایش تاریخ و زمان جاری سیستم خواهد بود:

5/7/2020 12:50:58 PM

در صورتیکه قصد داشته باشید تنها تاریخ جاری سیستم نمایش داده شود می توانید از متد ToShortDateString استفاده نمایید.

static void Main(string[] args)
{
    Console.WriteLine(DateTime.Now.ToShortDateString());
    Console.ReadLine();
}
output:
5/7/2020

و برای بدست آوردن زمان جاری سیستم می توان از متد ToShortTimeString استفاده نمود.

static void Main(string[] args)
{
    Console.WriteLine(DateTime.Now.ToShortTimeString());
    Console.ReadLine();
}
output:
12:53 PM

همچنین این قابلیت وجود دارد که اطلاعاتی از قبیل سال، ماه، روز، روز هفته و ... را نیز بدست آورد که برای برای استفاده از این قابلیت ها بهتر است یک نمونه از آن ساخته شود.

DateTime myDate = DateTime.Now;

دقت داشته باشید که در این مثال برای ساخت نمونه از دستور new استفاده نشده است. برخی از کلاس ها و ساختارها این قابلیت را دارند که با مقداردهی یک خاصیت مانند DateTime.Now شی مورد نظر را مقدار دهی کنند. حال توسط myDate می توان به اطلاعات دقیق تری از تاریخ و زمان سیستم دسترسی داشت.

بدست آوردن سال

Console.WriteLine(myDate.Year);
output:
2020

بدست آوردن ماه

Console.WriteLine(myDate.Month);
output:
5

بدست آوردن روز

Console.WriteLine(myDate.Day);
output:
7

بدست آوردن نام روز هفته

Console.WriteLine(myDate.DayOfWeek);
output:
Thursday

بدست آوردن ساعت

Console.WriteLine(myDate.Hour);
output:
13

بدست آوردن دقیقه

Console.WriteLine(myDate.Minute);
output:
28

بدست آوردن ثانیه

Console.WriteLine(myDate.Second);
output:
38

تاریخ شمسی

در بسیاری مواقع استفاده از تاریخ میلادی برای کاربران فارسی زبان کاربرد زیادی ندارد و ترجیح می دهند در برنامه های خود از تاریخ شمسی استفاده نمایند. در صورتیکه قصد داشته باشید از تاریخ شمسی در برنامه های خود استفاده نمایید می بایست ابتدا فضای کاری System.Globalization را به برنامه اضافه نمایید.

using System.Globalization;

پس از افزودن این فضای کاری می بایست یک نمونه از ساختار DateTime و یک نمونه از کلاس PersianCalendar ایجاد نمایید.

static void Main(string[] args)
{
    DateTime myDate = DateTime.Now;
    PersianCalendar pc = new PersianCalendar();
}

توجه داشته باشید که نمونه ساخته شده از کلاس PerisanCalendar متدهای مختص خود را دارد و همانند DateTime قابل استفاده نمی باشد. مهمترین متدهای موجود در این کلاس عبارتند از:

  • GetYear: بدست آوردن سال.
  • GetMonth: بدست آوردن ماه.
  • GetDayOfMonth: بدست آوردن روز.

برای مثال اگر قصد داشته باشید سال جاری سیستم را به شمسی استخراج نمایید به شکل زیر خواهد بود.

static void Main(string[] args)
{
    DateTime myDate = DateTime.Now;
    PersianCalendar pc = new PersianCalendar();
    Console.WriteLine(pc.GetYear(myDate));
    Console.ReadLine();
}
output:
1399

همانطور که متوجه شدید متدهای موجود در کلاس PersianCalendar یک تاریخ را دریافت کرده و اطلاعات متناسب با آن را استخرج می نمایند.

مثال: تاریخ جاری سیستم را به شمسی نمایش دهید.

static void Main(string[] args)
{
    DateTime myDate = DateTime.Now;
    PersianCalendar pc = new PersianCalendar();
    int year = pc.GetYear(myDate);
    int month = pc.GetMonth(myDate);
    int day = pc.GetDayOfMonth(myDate);
    Console.WriteLine(string.Format("{0}/{1:D2}/{2:D2}",year,month,day));
    Console.ReadLine();
}

خروجی دستورات فوق به شکل زیر خواهد بود:

1399/02/18