تبدیل رشته تاریخ به نوع datetime
سلام دوستان مهندس.
من می خوام یک رشته تاریخ شمسی رو به نوع datetime تبدیل کنم . مثل کد زیر
System.Globalization.CultureInfo pr = new System.Globalization.CultureInfo("fa-ir");
DateTime dt = DateTime.ParseExact("1396/04/31", "yyyy/MM/dd", pr);
ولی dt به جای اینکه 1396/04/31 باشه، تاریخ میلادی (2017/7/22) هست.
به جای (CultureInfo("fa-ir از invariantCulture استفاده کردم ولی با تاریخ های 31 روزه شمسی مشکل داره و خطا میده
چطور این مشکل رو برطرف کنم. یعنی یک رشته تاریخ شمسی رو به نوع datetime تبدیل کنم?
نقل قول: تبدیل رشته تاریخ به نوع datetime
سلام
از PersianCalendar Class استفاده کن
لینک
نقل قول: تبدیل رشته تاریخ به نوع datetime
نقل قول:
نوشته شده توسط
Mag-Mag
سلام
از PersianCalendar Class استفاده کن
لینک
بازم نشد
PersianCalendar persianDate = new PersianCalendar();
DateTime st = persianDate.ToDateTime(1396, 04, 23, 0, 0, 0, 0);
با کمال تعجب بازم به من تاریخ میلادی برمیگردونه!!!!!
چراااااا؟؟؟
اینکه window 10 دارم نمیتونه باعث این مشکل بشه؟ چ(ون یه جایی همچین چیزی خوندم)
نقل قول: تبدیل رشته تاریخ به نوع datetime
ببخشید من شاید متوجه منظورتون نشدم
شما توی نوع datetime نمیتونی تاریخ فارسی ذخیره کنی
البته منم فکر میکنم توی ویندوز 10 ، اگر فرمت ویندوز رو فارسی بزنی (توی تنظیمات Region) ، مشکل پیش میاد
من خودم برای تبدیل تاریخ های فارسی به میلادی و برعکس از این کد استفاده می کنم
System.Globalization.PersianCalendar persiandate = new System.Globalization.PersianCalendar();
DateTime GregorianDate = new DateTime(DateTime.Now.Ticks);
GregorianDate = persiandate.ToDateTime(1396, 2, 18, 0, 0, 0, 0);
Response.Write(string.Format("Gregorian Calendar: {0}/{1}/{2} ", GregorianDate.Year, GregorianDate.Month.ToString("D2"), GregorianDate.Day.ToString("D2")));
Response.Write(string.Format("<br/>Persian Calendar : {0}/{1}/{2}", persiandate.GetYear(GregorianDate), persiandate.GetMonth(GregorianDate).ToString("D2") ,persiandate.GetDayOfMonth(GregorianDate).ToString ("D2")));
نقل قول: تبدیل رشته تاریخ به نوع datetime
نقل قول:
نوشته شده توسط
Mag-Mag
ببخشید من شاید متوجه منظورتون نشدم
شما توی نوع datetime نمیتونی تاریخ فارسی ذخیره کنی
البته منم فکر میکنم توی ویندوز 10 ، اگر فرمت ویندوز رو فارسی بزنی (توی تنظیمات Region) ، مشکل پیش میاد
من خودم برای تبدیل تاریخ های فارسی به میلادی و برعکس از این کد استفاده می کنم
System.Globalization.PersianCalendar persiandate = new System.Globalization.PersianCalendar();
DateTime GregorianDate = new DateTime(DateTime.Now.Ticks);
GregorianDate = persiandate.ToDateTime(1396, 2, 18, 0, 0, 0, 0);
Response.Write(string.Format("Gregorian Calendar: {0}/{1}/{2} ", GregorianDate.Year, GregorianDate.Month.ToString("D2"), GregorianDate.Day.ToString("D2")));
Response.Write(string.Format("<br/>Persian Calendar : {0}/{1}/{2}", persiandate.GetYear(GregorianDate), persiandate.GetMonth(GregorianDate).ToString("D2") ,persiandate.GetDayOfMonth(GregorianDate).ToString ("D2")));
خیلی ممنون از پاسخ گوییتون.
فقط یه سوال: اگر ما تو نوع datetime نمیتونیم تاریخ فارسی ذخیره کنیم پس یک تاریخ فارسی رو چطور در پایگاه داده به صورت datetime2 ذخیره کنیم یعنی میشه پارامترمون رشته باشه و در پایگاه داده از نوع datetime2 ذخیره بشه؟
نقل قول: تبدیل رشته تاریخ به نوع datetime
فیلد تاریخ فارسی تو توی دیتا بیس از نوع char(10) بگیر
فقط دقت کن که موقع ذخیره سازی ، حتما تاریخ هات 10 کاراکتر باشه
مثلا بجای 1396/2/2 باید 1396/02/02 ذخیره کنی
که بعدا برای سرچ و مرتب سازی مشکل نخوری
یک راه دیگش اینه که فیلد تاریخت رو از نوع bigint بگیری و Datetime().Ticks رو توش ذخیره کنی
و هر موقع خواستی با همین PersianCalendar تبدیل کنی و نمایش بدی یا موقع جستوجو اول تاریخت رو به Ticks تبدیل کنی و بعد پاس بدی به SQL
این راه دومی بدلیل نوع داده ، سرعت بهنری توی سرچ ها بهت میده
بسته به تعداد رکوردی که میخوای داشته باشی
من خودم برای جداولی که خیلی روی فیلد تاریخ سرچ ندارن و از راه اول استفاده میکنم
نقل قول: تبدیل رشته تاریخ به نوع datetime
نقل قول:
نوشته شده توسط
saeid6366
سلام دوستان مهندس.
من می خوام یک رشته تاریخ شمسی رو به نوع datetime تبدیل کنم . مثل کد زیر
System.Globalization.CultureInfo pr = new System.Globalization.CultureInfo("fa-ir");
DateTime dt = DateTime.ParseExact("1396/04/31", "yyyy/MM/dd", pr);
ولی dt به جای اینکه 1396/04/31 باشه، تاریخ میلادی (2017/7/22) هست.
به جای (CultureInfo("fa-ir از invariantCulture استفاده کردم ولی با تاریخ های 31 روزه شمسی مشکل داره و خطا میده
چطور این مشکل رو برطرف کنم. یعنی یک رشته تاریخ شمسی رو به نوع datetime تبدیل کنم?
کلا datetime ماهیت میلادی داره. پس با این کدی که نوشتید تبدیل شمسی به میلادی درست انجام میشه. اگر میخواهید نمایش بدید که نیاز به تبدیل نیست. اگر هم میخواهید ذخیره کنید باید همین dt را ذخیره کنید.
اینکه در ویندوز10 تاریخ میلادی به صورت شمسی نمایش داده بشه مربوط به تنظیمات ویندوز هست که میتونید در موردش در اینترنت جستجو کنید ولی توصیه میکنم همه تبدیلات رو خودتون انجام بدید تا در ویندوزهای دیگر هم جواب بگیرید.
نقل قول: تبدیل رشته تاریخ به نوع datetime
سلام. من هم مشکلی تقریبا مشابه مشکل دوستمون دارم. من فیلدهای تاریخم رو nvarchar در نظر گرفتم و مقدار شمسی رو توشون ذخیره میکنم. حالا میخوام این دو تاریخ رو با هم مقایسه کنم باید اول تبدیل به تاریخ میلادی کنم اما تو تبدیل تاریخ ماه های 31 روزه به مشکل میخورم. میشه بگید چه طور میتونم تاریخ شمسی رو بدون مشکل به نوع datetime تبدیل کنم؟؟؟؟ و یا اینکه حداقل راهی برای مقایسه دو رشته باشه که توشون تاریخ ذخیره شده.ممنون
نقل قول: تبدیل رشته تاریخ به نوع datetime
دوستا سلام من تو كد زير با خطا مواجه ميشم :
string temp = exampleInput3.Text;
PersianDateTime persianDate = PersianDateTime.Parse("1396/03/02");
DateTime miladiDate = persianDate.ToDateTime();
RadScheduler1.SelectedDate = miladiDate;
}
البته در global.asax هم اين كد رو نوشتم:
var persianCulture = new PersianCulture();
persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
persianCulture.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy";
persianCulture.DateTimeFormat.AMDesignator = "صبح";
persianCulture.DateTimeFormat.PMDesignator = "عصر";
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;
وقتي تو اين خط PersianDateTime persianDate = PersianDateTime.Parse("1396/03/02"); بجاي مقدار رشته ثابت مقدار رو از يك تكست باكس ست ميكنم به فرمت رشته گير ميده و لي اگر رشته رو به صورت ثابت وارد كنم مشكلي نداره
نقل قول: تبدیل رشته تاریخ به نوع datetime
سلام
اگه با مقدار ثابت درسته و با مقدار textbox درست نیست
خوب احتمالا فرمت رشته textbox به صورت تاریخ نیست
یا مثلا موقع فراخوانی مقدارش خالی هست
میتونید یک breakpoint بزارید
و ببنید دقیقا مقدار textbox تون چی هست
اگه نشد ، متن خطاتون رو قرار بدید
2 ضمیمه
نقل قول: تبدیل رشته تاریخ به نوع datetime
والا هم مقدار ثابت هم مقداری که تو تکست باکس هست مشابه همه.ضمیمه 145275ضمیمه 145276
نقل قول: تبدیل رشته تاریخ به نوع datetime
تاریخ فارسی رو که نمی تونی مستقیم بدی به datetime
یک تابع برات نوشتم
ازش استفاده کن
تاریخ فارسی رو پاس بده به این تابع
خروجیش تاریخ میلادی هست
public static DateTime GetGregorianDateFromPersian(string pdate)
{
try
{
DateTime dt = new DateTime(int.Parse(pdate.Substring(0, 4)), int.Parse(pdate.Substring(5, 2)), int.Parse(pdate.Substring(8, 2)), new System.Globalization.PersianCalendar());
return dt;
}
catch (Exception)
{
return DateTime.Now;
}
}