PDA

View Full Version : مقایسه تاریخ و زمان>کوک کردن برنامه



dr_ghezavat
چهارشنبه 13 آبان 1388, 03:11 صبح
سلام . قصد دارم در یک برنامه با استفاده از dateTimePicker و یک maskedTexBox زمانی رو به در برنامه داشته باشم تا هر وقت تاریخ سیستم با تاریخ مذکور برابر یا فراتر شد اتفاق خاصی بیفته . من یک بار مقادیر dtP و mtb رو به صورت رشته دراوردم و سعی کردم با تاریخ سیستم مقایسه کنم . جواب نداد . یه بار هم همون رشته رو با datetime.parse برگردوندم به نوع دیتتایم . باز نشد . چطور باید عمل مقایسه رو انجام بدم ؟

far9090
چهارشنبه 13 آبان 1388, 14:20 عصر
متوجه منظورتون دقیقا نشدم . ولی دو نوع DateTime در C#‎ به راحتی با هم قابل مقایسه هستن . شما حتی میلی ثانیه ها رو هم می تونید با هم مقایسه کنید . شما باید مقادیر textbox رو از هم جدا کنید و داخل فیلدهای hour , minute و secound بریزید . بعد هم هر وقت خواستید با هم مقایسه کنید .
وقتی یک نمونه از DateTime میسازید داخل Constructor پارامتر های ساعتتون رو بدید .

Reza_Yarahmadi
چهارشنبه 13 آبان 1388, 15:06 عصر
تاریخی که کاربر وارد میشه رو DateTime تبدیل کن و از زمان جاری سیستم کم کن ، نتیجه رو توی یه TimeSpan ذخیره کن. بعدش چک کن ببین نتیجه صفر و یا کمتر از صر شده یا نه!
DateTime DT = Convert.ToDateTime("2009/11/4 15:20:00");
DateTime Now = DateTime.Now;
TimeSpan Result = DT - Now;
if (Result.TotalSeconds <= 0)
{
//Do Some Things
}

dr_ghezavat
پنج شنبه 14 آبان 1388, 03:40 صبح
ضمن تشکر از همه باس بگم متأسفانه هرچی سعی کردم نشد . ریزالت به هیچ وجه به سمت صفر نیل نمیکنه . یا مثبت میشه یا منفی . و این یعنی توقفی برای برنامه و اجرای دستورات نیست .
من دو تا حالتو امتحان کردم . یه بار تایم.نا رو از اونیکی کم کردم یه بار برعکسش . ولی در هر دو صورت مقدار ریزالت از صفر شروع میشه و افزایش یا کاهش پیدا میکنه . به صفر نمیرسه .

far9090
پنج شنبه 14 آبان 1388, 13:11 عصر
DateTime dateTime1 = new DateTime();
DateTime datetime2;
private void Form1_Load(object sender, EventArgs e)
{
datetime2 = new DateTime(1, 1, 1, 13, 31, 0);
}

private void timer1_Tick(object sender, EventArgs e)
{
dateTime1 = DateTime.Now;
TimeSpan timeSpan = new TimeSpan();
timeSpan = dateTime1 - datetime2;
this.Text = timeSpan.Hours.ToString() +":"+ timeSpan.Minutes.ToString()+":" + timeSpan.Seconds.ToString();
}
همین رو کپی کن . فقط datetime2 رو با یک دقیقه تاخیر کوک کن . برنامه رو اجرا کن , دقیقا تو text فرمتون اگه ببینید در هنگام مساوی شدن دو مقدار 0 میشه .

Reza_Yarahmadi
پنج شنبه 14 آبان 1388, 19:24 عصر
متأسفانه هرچی سعی کردم نشد . ریزالت به هیچ وجه به سمت صفر نیل نمیکنه . یا مثبت میشه یا منفی . و این یعنی توقفی برای برنامه و اجرای دستورات نیست .
من دو تا حالتو امتحان کردم . یه بار تایم.نا رو از اونیکی کم کردم یه بار برعکسش . ولی در هر دو صورت مقدار ریزالت از صفر شروع میشه و افزایش یا کاهش پیدا میکنه . به صفر نمیرسه .بایدم صفر نشه چون خاصیت TotalSeconds عددی اعشاری (Double) برمیگردونه که توی این حالت اختلاف دو زمان بر حسب ثانیه است (اعشارش میلی ثانیه رو نشون میده). اگر این کد رو توی یه تایمر بنویسید و خاصیت Interval رو برابر 1 بذارید بازم احتمال صفر شدن Result پایینه! به همین خاطر توی شرط کوچکتر مساوی رو چک کردم. شما زمان مورد نظر خودتون رو از زمان کنونی کم کنید اگه Result منفی شد کاری که میخواید رو انجام بدید بعد زمان خودتون رو کوک کنید
DateTime DT = Convert.ToDateTime("2009/11/4 15:20:00");
private void timer1_Tick(object sender, EventArgs e)
{
DateTime Now = DateTime.Now;
TimeSpan Result = DT - Now;
if (Result.TotalSeconds <= 0)
{
//Do Some Things
DT = DT.AddMinutes(3);
}
}