PDA

View Full Version : سوال: اختلاف دو تاریخ



علی فتحی
سه شنبه 29 مرداد 1392, 01:26 صبح
لطفا این نونه رو نگاه کنید چرا تفاوت دو تاریخ در گزارش فقط برای سال درست در میاد.
بخاطر حجم سورس اصلی نذاشتم

MohammadHadi2031
سه شنبه 29 مرداد 1392, 06:26 صبح
لطفا سورس دستوری که برای اختلاف دو تاریخ استفاده کردید رو بذارید

rezaei_y
سه شنبه 29 مرداد 1392, 08:13 صبح
static public bool IsValidDate(string Date)
{
bool IsValid = true;
int Year = int.Parse(Date.Substring(0, Date.IndexOf("/")));
int Month = int.Parse(Date.Substring(Date.IndexOf("/") + 1, Date.LastIndexOf("/") - Date.IndexOf("/") - 1));
int Day = int.Parse(Date.Substring(Date.LastIndexOf("/") + 1));

PersianCalendar pc = new PersianCalendar();
try
{
pc.ToDateTime(Year, Month, Day, 0, 0, 0, 0, PersianCalendar.PersianEra);
}
catch
{
IsValid = false;
}

return IsValid;
}
static public bool IsValidTime(string thetime)
{
DateTime time;
bool valid = DateTime.TryParseExact(thetime,
"H:m:s",
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out time);

return valid;
}


static public TimeSpan DifferenceDate(string StartDate, string time1, string EndDate, string time2)
{
PersianCalendar pc = new PersianCalendar();
TimeSpan tsEmpty=new TimeSpan(0,0,0,0,0);

if (!IsValidDate(StartDate) || !IsValidDate(EndDate))
return tsEmpty;


int Year = int.Parse(StartDate.Substring(0, StartDate.IndexOf("/")));
int Month = int.Parse(StartDate.Substring(StartDate.IndexOf("/") + 1, StartDate.LastIndexOf("/") - StartDate.IndexOf("/") - 1));
int Day = int.Parse(StartDate.Substring(StartDate.LastIndexO f("/") + 1));

int h=0, m=0, s=0;
string[] t1;
if (IsValidTime(time1))
{
t1 = time1.Split(':');
if (t1.Length == 3)
{
h = int.Parse(t1[0]);
m = int.Parse(t1[1]);
s = int.Parse(t1[2]);
}

}
else
{
h = 0;
m = 0;
s = 0;
}




DateTime myStartTime = pc.ToDateTime(Year, Month, Day, h, m, s, 0);

string[] t2;
if (IsValidTime(time2))
{
t2= time2.Split(':');
h = int.Parse(t2[0]);
m = int.Parse(t2[1]);
s = int.Parse(t2[2]);



}
else
{
h = 0;
m = 0;
s = 0;
}

Year = int.Parse(EndDate.Substring(0, EndDate.IndexOf("/")));
Month = int.Parse(EndDate.Substring(EndDate.IndexOf("/") + 1, EndDate.LastIndexOf("/") - EndDate.IndexOf("/") - 1));
Day = int.Parse(EndDate.Substring(EndDate.LastIndexOf("/") + 1));
DateTime myEndTime = pc.ToDateTime(Year, Month, Day, h, m, s, 0);

TimeSpan myDifference = myEndTime - myStartTime;

return (myDifference);
}

علی فتحی
سه شنبه 29 مرداد 1392, 23:26 عصر
دوست عزیز دستور خاصی استفاده نکردم

علی فتحی
چهارشنبه 30 مرداد 1392, 00:18 صبح
لطفا نگاه کنید

khokhan
چهارشنبه 30 مرداد 1392, 01:03 صبح
لطفا نگاه کنید
سلام
دوست عزیز کل کدی که شما برای این هدف به کار بردین اینه اون هم در داخل گزارش :

=Fields!date1.Value-Fields!date2.Value
به نظر من همونطوری که دوستمون هم در پست3 اشاره کردند شما بایستی اختلاف دو تاریخ رو در داخل فرم برنامه با یه متد مخصوص بدست بیارین یعنی سال و ماه رو به روز تبدیل بکنین و از همدیگه کم کنین ونتیجه رو داخل یه ستون در گرید نمایش بدین و بعد بفرستین به گزارش