tgoop.com/fullStackDevs/481
Last Update:
#آشنایی_با_تاریخ_و_زمان
#قسمت_اول
▪️تاریخ و زمان بخش مهمی از زندگیه روزمره و همچنین جزئی جدایی ناپذیر در پروژه های ماست
در این مقاله به بررسی تایپ های مختلف برای نگه داری تاریخ و زمان می پردازیم و پیرامون آنها طی قسمت های مختلف بحث خواهیم کرد.▫️
DateTime
🔸این نوع داده یک ساختار ValueType
مانند int , double
و .. است که در فضای نام System
قابل دسترسی میباشد. این struct
اینتر فیس های IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
پیاده سازی کرده است .
یک شئ از نوع DateTime
دارای متد هایی برای دستکاری زمان میباشد، متدهایی برای افزودن Day ,Hour,Minute
و همچنین متدهایی یرای تبدیل یک رشته با فرمت تاریخ و زمان به یک شئ ار نوع DateTime
و همچنین دارای مشخصه هایی برای دریافت روز ، ماه ، ساعت از آن شی است.
یکی از این مشخصه ها Kind
میباشد و مشخص کننده نوع زمان برساس مقادیر خروجی زیر است Unspecified، Utc، Local time
DateTime Formatting
کاربران و همچنین برنامه نویسان به فرمت های مختلفی از زمان تاریخ و زمان نیاز دارند. برای مثال تاریخ در فرمت "mm/dd/yyyy"
که به صورت 05/31/2019 نمایش داده خواهد شد.▫️
Handling Nullable DateTime
🔸 همانطور که گفته شد DateTime
یک ValueType
است و به طور پیشفرض نمیتوان به آن مقدار(به اصطلاح) null
را اختصاص داد . یکی از راه های اینکه یک ValueType
مقدار null
را بپذیرد باید elvis-operator را بعد از تعریف نوغ یک متغیر استفاده کرد DateTime? nullDateTime = null;
بدین ترتیب valueType
شما نال پذیر خواهد شد .▫️
Parse string to DateTime object
🔸گاهی نیاز داریم تا یک رشته را که فرمت تاریخ و زمان دارن به یک شئ DateTime
تبدیل کنیم تا عملیات مورد نظرمان را روی انجام دهیم برای انجام دادن این کار متد های متعددی در اختیارمان قرار دارد مثال : Convert.ToDateTime()
✳️ سوالی که ممکن است در ذهن شما ایجاد شود این است که دلیل این تعداد متد برای تبدیل رشته به زمان چیست⁉️
DateTime.Parse()
DateTime.ParseExact()
DateTime.TryParse()
DateTime.TryParseExact()
🔸پاسخ واضح است . هر متد برای هدف خاصی است . در اینجا به بررسی برخی میپردازیم ▫️
DateTime.ParseExact()
🔸این متد یه شما این اطمینان را میدهد که رشته خودرا به یک فرمت مشخص تبدیل کنید . اما اگر فرمت رشته ورودی با فرمت تعیین شده توسط شما متفاوت باشد سبب صادر شدن یک خطا در برنامه میشود پس اگر از فرمت رشته ورودی خود مطممئن هستید وقصد تبدیل آن به فرمت مورد نظر خود را دارید این متد انتخاب خوبی است.▫️
DateTime.TryParseExact()
🔸خروجی این متد یه مفدار بولین است و این اطمینان رو به شما میدهد که رشته ورودی قابل تبدیل به فرمت مشخص شده میباشد یا خیر. واگر قابل تبدیل نباشد خطاهای صادر شده را مدیریت میکند.پس از این جهت هیچ نگرانی برای شما وجود ندارد.
▫️DateTimeOffset
🔸 این تایپ در Net framework 3.5
معرفی شد از این نوع تایپ زمانی باید استفاده کرد که اختلاف زمانی برحسب UTC برای ما مهم باشد و بخواهیم در هنگام ذخیره سازی تاریخ و زمان ، زمان به صورت محلی ذخیره نشود و به همراه آن اختلاف زمانی(Offset) نیز ذخیره شود.
فرمت ذخیره سازی تاریخ و زمان در این تایپ به این شکل استDate + Time + Offset
❗️درواقع تعبیر و نام گذاری این تایپ به این شکل( DateTimeWithOffset
) باعث درک بهتر این مسئله میشود.
اکثر مشخصه های این تایپ با تایپ DateTime یکسان هستند اما مشخصه های جدیدی نیز به آن اضافه شده است🔻
DateTimeOffset.DateTime
این مشخصه مقدار زمان را بدون تبدیل ان به زمان محلی برمی گرداند.🔻
DateTimeOffset.LocalDateTime
این مشخصه مقدار زمان را براساس زمان محلی برمیگرداند.🔻
DateTimeOffset.Offset
این مشخصه میزان Offset از UTC را برمیگرداند.🔻
DateTimeOffset.UtcDateTime
این مشخصه زمان را براساس UTC برمیگرداند.
🔸برای مثال اگر متغیری از نوع DateTimeOffset
تعریف کنیم وزمان حال را به آن اختصاص دهیم نتیجه به این صورت خواهد بود05/31/2019 03:11:56 PM +04:30
که 05/31/2019 03:11:56 PM
تاریخ و زمان و +04:30
و اختلاف زمانی نسبت به UTC
خواهد بود که اگر اختلاف زمانی را با تاریخ و زمان جمع کنیم UTC
بدست خواهد آمد. این بهترین راه برای کار کردن با محدوده زمانی های مختلف است.
▪️Storing DateTime (UTC) vs. storing DateTimeOffset
🔸 همیشه و همیشه زمان را به صورت UTC
در دیتابیس ذخیره کنید و متناسب با منطقه زمانی کاربر نمایش دهید.
اما در بعضی سناریو های خاص مشکلاتی و چالش هایی وجود دارد به عنوان مثال اگه سناریویی مانند مثال زیر داشته باشید :
@FullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/481