PDA

View Full Version : سوال: مشكل تاريخ شمسي با بعضي تاريخهاي خاص



rana-writes
شنبه 28 مرداد 1391, 00:24 صبح
سلام
من توي ديتابيسم، تاريخ ميلادي رو با فرمت DateTime نگه ميدارم و موقع فراخواني براي اينكه به شمسي تبديلش كنم از اين تابع استفاده ميكنم



static public DateTime MiladyToPc(int Day, int Month, int Year)
{
string MiladyDate = Year + "/" + Month + "/" + Day;
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime Milady = DateTime.Parse(MiladyDate);
string ShamsiDate = pc.GetYear(Milady) + "/" + pc.GetMonth(Milady) + "/" + pc.GetDayOfMonth(Milady);
DateTime Shamsi = Convert.ToDateTime(ShamsiDate);
return Shamsi;
}


روز و ماه و سال ميلادي رو به اين تابع پاس ميدم و تاريخ شمسي رو برميگردونم
ولي نميدونم چرا توي يه تاريخهاي خاصي اشكال داره
مثلا توي تاريخ 91/4/31
از اين خط

DateTime Shamsi = Convert.ToDateTime(ShamsiDate);

اين ارور رو ميگيره
String was not recognized as a valid DateTime.
در حالي كه توي تاريخ هاي ديگه كاملا درست و صحيح داره كار ميكنه
ممنون ميشم راهنماييم كنين بايد چكار كنم

mousa1992
شنبه 28 مرداد 1391, 02:04 صبح
طبق این ارور رشته ی ارسالی شما برای تبدیل به نوع datetime معتبر نیست
شکل کلی باید به این صورت باشه xxxx/xx/xx قسمت سال با طول 4 و ماه و روز نیز 2

تاریخ ذخیره شده در دیتابیس گفتید datetime هست و پارامتر های ارسالی به تابعتون سه عدد از نوع int که همون سال و ماه و روز اگه این کارتون دلیل خاصی نداره پارامتر وردی رو از نوع DateTime در نظر بگیرید کار تابعتون سبکتر بشه ، شما سال و ماه و روز رو ارسال کردید و اونا رو به رشته تبدیل کردید به مدل تاریخ و بعد تبدیلش کردید به datetime دباره اومدید سال و ماه و روز رو از datetime استخراج کردید برای تبدیلشون به شمسی و باز این تاریخ شمسی رو به datetime تبدیل کردی برای برگشت !!!!!

و اینکه چرا تاریخ شمسی بازگتی از تابع رو از نوع datetime در نظر گرفیتید ! از string استفاده کنید

مثل این:


static public DateTime MiladyToPc(ِDateTime Date

{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
string ShamsiDate = pc.GetYear(Date) + "/" + pc.GetMonth(Date) + "/" + pc.GetDayOfMonth(Date);
return ShamsiDate;
}

h_r_sh
شنبه 28 مرداد 1391, 02:21 صبح
فرمت تاریخ میلادی شاید به شکل روز/ماه/سال نباشه. شاید با فرمت ماه/روز/سال باشه. در این حالت، اگر ماه از 12 بیشتر باشه خطا می گیره.

rana-writes
شنبه 28 مرداد 1391, 12:44 عصر
طبق این ارور رشته ی ارسالی شما برای تبدیل به نوع datetime معتبر نیست
شکل کلی باید به این صورت باشه xxxx/xx/xx قسمت سال با طول 4 و ماه و روز نیز 2

تاریخ ذخیره شده در دیتابیس گفتید datetime هست و پارامتر های ارسالی به تابعتون سه عدد از نوع int که همون سال و ماه و روز اگه این کارتون دلیل خاصی نداره پارامتر وردی رو از نوع DateTime در نظر بگیرید کار تابعتون سبکتر بشه ، شما سال و ماه و روز رو ارسال کردید و اونا رو به رشته تبدیل کردید به مدل تاریخ و بعد تبدیلش کردید به datetime دباره اومدید سال و ماه و روز رو از datetime استخراج کردید برای تبدیلشون به شمسی و باز این تاریخ شمسی رو به datetime تبدیل کردی برای برگشت !!!!!

و اینکه چرا تاریخ شمسی بازگتی از تابع رو از نوع datetime در نظر گرفیتید ! از string استفاده کنید

مثل این:


static public DateTime MiladyToPc(ِDateTime Date

{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
string ShamsiDate = pc.GetYear(Date) + "/" + pc.GetMonth(Date) + "/" + pc.GetDayOfMonth(Date);
return ShamsiDate;
}




اينكه تاريخ شمسي رو دوباره تبديل به DateTime تبديل كردم براي اين بود كه بتونم روز و ماه و سال رو جدا كنم از توش
اينطوري كه فقط رشته برگردونه كه نميشه روز و ماه و سال رو جدا كنم

h_assefi
شنبه 28 مرداد 1391, 14:36 عصر
شما اگه بخاطر جدا کردن روز از ماه و سال میای این تبدیلات رو انجام میدی بهتره که بیای و بشکل خیلی ساده تر با string کار کنی تا به این مشکلات بر نخوری

mousa1992
شنبه 28 مرداد 1391, 19:18 عصر
اينطوري كه فقط رشته برگردونه كه نميشه روز و ماه و سال رو جدا كنم
همونطور که دوستمون گفتند میتونید با استفاده از متد substring قسمت خاصی از رشته رو جدا کنید