FULLSTACKDEVS Telegram 481
#آشنایی_با_تاریخ_و_زمان
#قسمت_اول

▪️تاریخ و زمان بخش مهمی از زندگیه روزمره و همچنین جزئی جدایی ناپذیر در پروژه های ماست
در این مقاله به بررسی تایپ های مختلف برای نگه داری تاریخ و زمان می پردازیم و پیرامون آنها طی قسمت های مختلف بحث خواهیم کرد.
▫️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



tgoop.com/fullStackDevs/481
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

Telegram channels fall into two types: The best encrypted messaging apps Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months. How to Create a Private or Public Channel on Telegram? ZDNET RECOMMENDS
from us


Telegram Web Devs
FROM American