PDA

View Full Version : سوال: جمع دو داده از نوع تاریخ یا ساعت



ya30ien2
جمعه 14 تیر 1392, 14:13 عصر
سلام
چطوری میتونم دو داده رو که داخل هر دو ساعت ذخیره شده با هم جمع کنم؟


morning2 = Convert.ToDateTime(Convert.ToDateTime(morning) + Convert.ToDateTime(morning2));

ارور میگیره
اما برای کم کردن مشکلی نیست

ya30ien2
جمعه 14 تیر 1392, 14:36 عصر
من یک گرید ویو دارم یک ستون ساعت شروع کار و یک ستون پایان کار
حالا داخل یک حلقه میخوام این دو تا رو از هم کم کنم و بعد به سطر بعدی برم و دوباره اختلاف رو به دست بیارم و با اختلاف قبلی جمع کنم و مجموع کارکرد رو به دست بیارم
اما نتونستم

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
morning = Convert.ToDateTime(dataGridView1.Rows[i].Cells[4].Value.ToString()) - Convert.ToDateTime(dataGridView1.Rows[i].Cells[3].Value.ToString());
morning2 += morning ;
lMorning.Text = morning2.ToString();
}

ya30ien2
جمعه 14 تیر 1392, 17:53 عصر
کسی نبود یاری کنه ؟

ya30ien2
شنبه 15 تیر 1392, 12:01 عصر
یعنی همچین مشکلی تا حالا کسی پیدا نکرده ؟
هر چی جستجو هم کردم راهی براش پیدا نکردم
:افسرده::افسرده::افسرده::افس ده::افسرده::افسرده::افسرده:: فسرده::افسرده::افسرده::افسر ه::افسرده::افسرده::افسرده:

esafb52
شنبه 15 تیر 1392, 12:07 عصر
خب کامل تر توضیح بدین نتونستم یعنی چی یعنی اشبتاه محاسبه میکنی یا خطا میده و................؟؟؟؟؟؟؟؟؟؟؟؟
فقط ساعت هست یا دقیقه و ثانیه هم هست
فرمت استفاده در گرید رو بگین

ya30ien2
شنبه 15 تیر 1392, 12:17 عصر
دوست عزیز گرید من از بانک پر میشه
بانک من اکسس هست
اون دو فیلد ساعت از نوع تاریخ که فقط ساعت ذخیره میکنه
مثلا (10:30)
حالا بر اساس یک جستجو گرید پر میشه مثلا 10 رکورد نمایش داده میشه
حالا دو فیلد ساعت دارم (ساعت اول شروع کار و ساعت دوم پایان کار)
من هر دو ساعت رو از هم کم میکنم یک زمان بدست میاد ذخیره میکنم
تا اینجا مشکلی نیست
اما من اگر بخوام عمل جمع رو انجام بدم ارور میگیره
عمل جمع باید صورت بپذیره برای اینکه میخوایم تمامی سطره اختلاف ساعت ها با هم جمع بشن و میزان کارکرد رو بدست بیاریم

wolf_majid
شنبه 15 تیر 1392, 12:22 عصر
طبق مثال زیر عمل کن :
string str1 = DateTime.Now.ToShortDateString();
DateTime dt=new DateTime(2012,07,06);
string str2 = dt.ToShortDateString();
TimeSpan span = DateTime.Parse(str1) - DateTime.Parse(str2);
Text = (DateTime.Now.AddDays(span.Days)).ToString();

esafb52
شنبه 15 تیر 1392, 12:23 عصر
الان شما گفتید ساعت ولی چیزی که نشون دادین دقیقه هم داره!!
ساده ترین راه اینه که قبلا از اون حلقه یه آرایه تعریف کنی و زمانی رو که بعد از کم کردن بدست میاری بریزی تو یه آرایه و بعد هم :

int[] m = new int[5];
m[0] = 1;
m[1] = 10;
m[4] = 15;
Console.WriteLine(m.Sum());

ya30ien2
شنبه 15 تیر 1392, 12:30 عصر
طبق مثال زیر عمل کن :
string str1 = DateTime.Now.ToShortDateString();
DateTime dt=new DateTime(2012,07,06);
string str2 = dt.ToShortDateString();
TimeSpan span = DateTime.Parse(str1) - DateTime.Parse(str2);
Text = (DateTime.Now.AddDays(span.Days)).ToString();

دوست عزیز گفتم که داخل کم کردن مشکلی نیست فقط جمع زدن اختلاف ساعت ها

wolf_majid
شنبه 15 تیر 1392, 12:35 عصر
string str1 = "12:04:20";
string str2 = "5:55:40";
TimeSpan span = DateTime.Parse(str1) - DateTime.Parse(str2);
DateTime dt = DateTime.Now;
dt = dt.Add(span);
Text = dt.ToShortTimeString();

ya30ien2
شنبه 15 تیر 1392, 12:35 عصر
الان شما گفتید ساعت ولی چیزی که نشون دادین دقیقه هم داره!!
ساده ترین راه اینه که قبلا از اون حلقه یه آرایه تعریف کنی و زمانی رو که بعد از کم کردن بدست میاری بریزی تو یه آرایه و بعد هم :

int[] m = new int[5];
m[0] = 1;
m[1] = 10;
m[4] = 15;
Console.WriteLine(m.Sum());

درست میگید بخاطر همین از دستور شما از نوع float گرفتم فقط یه مشکل اگه بخوام تایم دوم رو از اول کم کنم و داخل آرایه بریزم باید جواب نهایی رو درون آرایه از نوع float بریزم به چی تبدیل کنم ؟

esafb52
شنبه 15 تیر 1392, 12:41 عصر
string str1 = "12:04:20";
string str2 = "5:55:40";
TimeSpan span = DateTime.Parse(str1) - DateTime.Parse(str2);
DateTime dt = DateTime.Now;
dt = dt.Add(span);
Text = dt.ToShortTimeString();
فکر کنم این روش منطقی تر هست گه جواب نداد بگو با این روش حلش میکنیم آخرش نفهمیدم میخوای ساعت با دقیقه رو جمع بزنی یا نه فقط ساعت

ya30ien2
شنبه 15 تیر 1392, 12:51 عصر
فکر کنم این روش منطقی تر هست گه جواب نداد بگو با این روش حلش میکنیم آخرش نفهمیدم میخوای ساعت با دقیقه رو جمع بزنی یا نه فقط ساعت
اشتباه بدست میاره 3 تا رکورد گذاشتم اختلاف ذهنی حساب کنی 2:50 چیزی که بدست میاره 2:17
ساعت همراه با دقیقه!!!!!!!!!

esafb52
شنبه 15 تیر 1392, 13:10 عصر
اشتباه بدست میاره 3 تا رکورد گذاشتم اختلاف ذهنی حساب کنی 2:50 چیزی که بدست میاره 2:17
ساعت همراه با دقیقه!!!!!!!!!
تست شد کجاش اشتباهه؟؟؟

string str1 = "08:03";
string str2 = "14:20";
TimeSpan span = DateTime.Parse(str2) - DateTime.Parse(str1);
Console.WriteLine(span);
Console.ReadKey();

esafb52
شنبه 15 تیر 1392, 13:16 عصر
اینهم تست کاملتر
:

string str1 = "08:03";
string str2 = "14:20";
TimeSpan span = DateTime.Parse(str2) - DateTime.Parse(str1);
Console.WriteLine(span);
string str3 = "08:20";
string str4 = "14:20";
TimeSpan span2 = DateTime.Parse(str4) - DateTime.Parse(str3);
Console.WriteLine(span2);
Console.WriteLine("-------------------------------------------------");
Console.WriteLine(span + span2);
Console.ReadKey();

esafb52
شنبه 15 تیر 1392, 14:11 عصر
string s1, s2;
for (int i = 0; i < dataGridView1.RowCount-1; i++)
{

int f = i;
s1 = dataGridView1.Rows[i].Cells[0].Value.ToString();
s2 = dataGridView1.Rows[f].Cells[1].Value.ToString();
TimeSpan span = DateTime.Parse(s1) - DateTime.Parse(s2);
//برای قرار دادن مقدار بدست آمده در یه ستون گرید
dataGridView1.Rows[f].Cells[3].Value = span.ToString();
//برای بدست آوردن زمان نهایی
span += span;

}

ya30ien2
شنبه 15 تیر 1392, 14:27 عصر
من با کد زیر حلش کردم
string sec = "00:00";
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
TimeSpan span = DateTime.Parse(dataGridView1.Rows[i].Cells[4].Value.ToString()) - DateTime.Parse(dataGridView1.Rows[i].Cells[3].Value.ToString());
Console.WriteLine(span);
sec=Convert.ToString(Convert.ToDateTime( sec)+span);
lMorning.Text = sec ;
}


فقط پشتش تاریخ هم نشون میده تاریخ و (ق ظهر - ب ظهر)رو چطوری پاک کنم؟

ya30ien2
شنبه 15 تیر 1392, 14:41 عصر
این مشکل هم با این خط کد حل کردم اما نمیدونم منطقی هست یا نه؟
sec = Convert.ToDateTime(sec).Hour + ":" + Convert.ToDateTime(sec).Minute;

elhamkarimikarimi
شنبه 15 تیر 1392, 14:53 عصر
می تونی ساعت رو از تاریخ جداکنی با ساعت کم کنی
بعد دقیقه رو جدا کنی و دقیقه رو کم کنی
بعد ثانیه

و باید حواست باشه که اگه در جمع دقیقت از شست دقیقه بیشتر شد یک واحد به ساعتت اضافه کنه

همین


همین

ya30ien2
شنبه 15 تیر 1392, 15:20 عصر
چطوری میتونم وقتی جمع هر دو میشه مثلا 49:00 روز رو ازش بدست بیارم؟

wolf_majid
شنبه 15 تیر 1392, 22:18 عصر
من با کد زیر حلش کردم
string sec = "00:00";
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
TimeSpan span = DateTime.Parse(dataGridView1.Rows[i].Cells[4].Value.ToString()) - DateTime.Parse(dataGridView1.Rows[i].Cells[3].Value.ToString());
Console.WriteLine(span);
sec=Convert.ToString(Convert.ToDateTime( sec)+span);
lMorning.Text = sec ;
}


فقط پشتش تاریخ هم نشون میده تاریخ و (ق ظهر - ب ظهر)رو چطوری پاک کنم؟

به جای tostring از toShortTimeString استفاده کن
مثال :
string sec = "00:00";
TimeSpan span = DateTime.Parse("12:00:00 pm") - DateTime.Parse("05:00:00 am");
MessageBox.Show(span.ToString());
sec = (Convert.ToDateTime(sec) + span).ToShortTimeString();
Text = sec;


چطوری میتونم وقتی جمع هر دو میشه مثلا 49:00 روز رو ازش بدست بیارم؟
از متدهای timeSpan استفاده کن
مثال :
span =new TimeSpan(49,0,0);
Text = span.Days.ToString();

ya30ien2
شنبه 15 تیر 1392, 22:42 عصر
لطفا بر اساس کد زیر به من بگید چیکار کنم چون وقتی از کد بالا استفاده کردم جواب ناصحیح میده


string sec = "00:00";

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
TimeSpan span = DateTime.Parse(dataGridView1.Rows[i].Cells[4].Value.ToString()) - DateTime.Parse(dataGridView1.Rows[i].Cells[3].Value.ToString());
Console.WriteLine(span);
sec = Convert.ToString(Convert.ToDateTime(sec) + span);
sec =Convert.ToDateTime(sec).Hour + ":" + Convert.ToDateTime(sec).Minute;
lMorning.Text = sec;
}

wolf_majid
شنبه 15 تیر 1392, 22:51 عصر
این خط کدت رو :
sec = Convert.ToString(Convert.ToDateTime(sec) + span);
ویرایش کن
sec = (Convert.ToDateTime(sec) + span).ToShortTimeString();
خط بعدشم حذف کن

ya30ien2
شنبه 15 تیر 1392, 23:09 عصر
این خط کدت رو :
sec = Convert.ToString(Convert.ToDateTime(sec) + span);
ویرایش کن
sec = (Convert.ToDateTime(sec) + span).ToShortTimeString();
خط بعدشم حذف کن
فرقی نمیکنه و اون تایم اضافه رو نشون نمیده یعنی فقط یک رو نشون میده

wolf_majid
شنبه 15 تیر 1392, 23:37 عصر
حق با شماست
از همون روش خودتون استفاده کنید

ya30ien2
شنبه 15 تیر 1392, 23:41 عصر
حق با شماست
از همون روش خودتون استفاده کنید
خوب بازم نمیدونم چطوری اون 48 ساعت رو بدست بیارم که بگم 2 روز و یک ساعت کارکرد

wolf_majid
یک شنبه 16 تیر 1392, 00:04 صبح
خوب بازم نمیدونم چطوری اون 48 ساعت رو بدست بیارم که بگم 2 روز و یک ساعت کارکرد

منظورتون اون بود ؟ :لبخندساده:
فکر کردم قبل و بعد از ظهر رو میگید

طبق گفته پست 17 تونستید جمع کنید
خوب اگر زمان بدست آمده مثل ساعته ولی رشتست به صورت زیر عمل کنید
string sec = "49:00:00";
string[] strings = sec.Split(':');

TimeSpan span = new TimeSpan(int.Parse(strings[0]), int.Parse(strings[1]), int.Parse(strings[2]));

MessageBox.Show(string.Format("{0} Day and {1} Hour ", span.Days, span.Hours % 24));

ya30ien2
جمعه 21 تیر 1392, 01:32 صبح
و اینم کد نهایی که تونستم بنویسم قرار میدم شاید کس دیگه ای هم مثل من باشه :
////جمع ساعات کاری صبح

TimeSpan[] dtime = new TimeSpan[dataGridView1.Rows.Count - 1];

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
dtime[i]= Convert.ToDateTime( dataGridView1.Rows[i].Cells[4].Value.ToString())-Convert.ToDateTime( dataGridView1.Rows[i].Cells[3].Value.ToString());
if (i != 0)
{
dtime[0]=dtime[0]+dtime[i];
}

}
lMorning.Text = dtime[0].Days.ToString() + " روز و " + dtime[0].Hours.ToString() + "ساعت و" + dtime[0].Minutes.ToString()+"دقیقه";

mohsen22
جمعه 21 تیر 1392, 10:02 صبح
و اینم کد نهایی که تونستم بنویسم قرار میدم شاید کس دیگه ای هم مثل من باشه : lMorning.Text = dtime[0].Days.ToString() + " روز و " +
[/CSHARP]

مرسی - ای کاش کد کامل تری رو(بهمراه دیتا بیس) میزاشتید تا اموزش کامل تری رو ببینیم