PDA

View Full Version : سوال: SqlDateTime overflow



komeil64
شنبه 24 تیر 1391, 12:58 عصر
سلام
من وقتی از PersianCalendar استفاده می کنم و سال تاریخ مثلا میشه 1391 این ارور داده میشه

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.


ممنون میشم راهنمایی کنید

fakhravari
شنبه 24 تیر 1391, 13:52 عصر
static PersianCalendar persianCalendar = new PersianCalendar();
public static string ToShamsi(DateTime miladiDate)
{
string year = persianCalendar.GetYear(miladiDate).ToString();
string month = persianCalendar.GetMonth(miladiDate).ToString().Pa dLeft(2, '0');
string day = persianCalendar.GetDayOfMonth(miladiDate).ToString ().PadLeft(2, '0');
return year + "/" + month + "/" + day;
}

public static DateTime ToMiladi(string shamsiDate)
{
int year = int.Parse(shamsiDate.Substring(0, 4));
int month = int.Parse(shamsiDate.Substring(5, 2));
int day = int.Parse(shamsiDate.Substring(8, 2));
return persianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
}

string aaa = ToShamsi(DateTime.Now);
DateTime ssss = ToMiladi("1390/12/15 15:20");

komeil64
شنبه 24 تیر 1391, 14:06 عصر
الان من ToShamsi(DateTime.Now) رو میریزم تو دیتابیس دوباره همون ارور رو میده

fakhravari
شنبه 24 تیر 1391, 14:54 عصر
فیلد از چه نوعی گرفتید؟
به صورت میلادی ذخیره می کنید یا شمسی؟

komeil64
شنبه 24 تیر 1391, 15:00 عصر
نوع فیلد datetime
شمسی وارد کردم

rana-writes
شنبه 24 تیر 1391, 15:08 عصر
سلام

توي فيلدي كه از نوع datetime در نظر گرفتين نميتونين تاريخ شمسي ذخيره كنين
تاريخش بايد حتما ميلادي باشه

komeil64
شنبه 24 تیر 1391, 15:26 عصر
پس یعنی توی فریم ورک چهار حتما باید از تاریخ میلادی استفاده کرد یا نوع فیلد رو بجای datetime از string استفاده کرد!

fakhravari
شنبه 24 تیر 1391, 16:01 عصر
میتوانید از nchar 10 استفاده کنید.

alonemm
شنبه 24 تیر 1391, 16:25 عصر
پس یعنی توی فریم ورک چهار حتما باید از تاریخ میلادی استفاده کرد یا نوع فیلد رو بجای datetime از string استفاده کرد!

سلام:

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

komeil64
یک شنبه 25 تیر 1391, 12:49 عصر
توی دات نت 3 یه کد بود که تبدیل می کرد چیزی برای 4 سراغ دارین؟

ramin149
یک شنبه 25 تیر 1391, 13:19 عصر
من از روش زیر تاریخ شمسی خودم رو به میلادی تبدیل می کنم .


/// <summary>
/// تبدیل تاریخ فارسی کامل
///به تاریخ میلادی استاندارد
///ورودی : سه شنبه ، 13 تیر 1391
///خروجی : 2012/07/02
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public string PersianCalenderToStandard(string date)
{
string[] side = date.Split(' ');
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime dt = p.ToDateTime(int.Parse(side[5]), MonthStringToMonthInt(side[3]), int.Parse(side[2]), 0, 0, 0, 0);
string year = dt.Year.ToString();
string month = dt.Month.ToString();
if (month.ToString().Length == 1)
{
month = "0" + month;
}
string day = dt.Day.ToString();
if (day.ToString().Length == 1)
{
day = "0" + day;
}
return (year + "/" + month + "/" + day);
}