PDA

View Full Version : کم کردن از تاریخ



saninnnnnnnn
شنبه 07 شهریور 1388, 11:40 صبح
سلام به همگی
من میخواهم تاریخ موجود در بانک داده را که nvarchar تعریف کرده ام را از تاریخ جاری کم کنم که اگر کمتر از 24 ساعت باشد آن رکورد را پاک کنم
چگونه باید کم کنم؟:متفکر:
خیلی فوریی
هر کاری می کنم اصلا نیشه دو تا تاریخ را از هم کم کرد به خاطر نوع اش
اصلا نمیدونم منطق تعریف date تو بانک درسته؟

mn_zandy63
دوشنبه 09 شهریور 1388, 00:50 صبح
اگر کمتر از 24 ساعت باشد آن رکورد را پاک کنم



کمتر از 24 ساعت باشه یعنی تو همون روز باشه؟ یا ساعت رو میخوای چک کنی؟
یعنی توی nvarchar هم تاریخ هم ساعت رو نیگه داشتی؟
اگه نه، خب معنیش اینه که مساوی باشن دیگه چیکار به اختلافشون داری ;)
در کل هم یه راهش اینه که دو تا تاریخ رو بگیری به میلادی تبدیل کنی اختلافشون رو پیدا کنی.
موفق باشی

majid325
دوشنبه 09 شهریور 1388, 06:54 صبح
نوع فیلدت باید dateTime باشه و بعد با TimeSpam و یا متدهای خود DateTime عمل مقایسه رو انجام بدی.

saninnnnnnnn
دوشنبه 09 شهریور 1388, 08:38 صبح
من می خوام فقط تاریخ باشه...بعد برای یک قسمتی از برنامه است که بلیت خریده اند و حالا می خوان cancle کنن .می خوام چک کنم اگر تاریخ الان با تاریخ حرکت روی بلیت 1 روز مانده نصف پولش را پس بدم اگر هم نه هنوز بیش از یک روز مانده کل پول....
من با ساعت اصلا کاری ندارم...
ولی دقیقا کدهاشو نمیدونم چگونه بنویسم.....میشه واضح تر برام بگین...
ممنون می شم...

DlphIran
دوشنبه 09 شهریور 1388, 10:05 صبح
فقط كافيه زمانيكه زيربرنامه مربوط به تبديل ميلادي به شمسي رو صدا مي زني تاريخ ميلادي گرفته شده از سيستم را به اضافه عدد مورد نظر يا منهاي عدد مورد نظر كني.

مثلا من ، زير برنامه صدا زدن تاريخ سيستم ، بنام decodedate هست كه ميام dateرو به اضافه متغير عدد مي كنم و حاصل ارسال ميشه به زير برنامه ديگه اي كه مبدل ميلادي به شمسي هست.


DecodeDate(Date+i,Year,Month,Day);
);ConvertDateToShamsi(Year,Month,Day
حالا حاصل رو توي يه edit ديگه اي قرار ميديم بعد اين Edit رو با مقدار داخل جدول مقايسه مي كنيم و در صورت مثبت بودن جواب ، عمل مورد نظر انجام ميشه.

mn_zandy63
سه شنبه 10 شهریور 1388, 00:14 صبح
یک پیشنهاد بهت میکنم، در صورتی که امکانش رو داری، همونطور که دوستمون majid325 گفتند، نوع فیلدت رو در دیتابیس تغییر بده به datetime.
در اینصورت به سادگی هر نوع محاسبه و مقایسه ای رو میتونی روش انجام بدی.
در زمان نمایش هم به راحتی میتونی به صورت شمسی نمایش بدی تاریخت رو.

در صورتی هم که امکانش برات نباشه، بسته به اینکه به چه شکلی تاریخ رو در دیتابیست ذخیره کرده باشی راه حل های متفاوتی میشه ارائه داد.
به عنوان مثال با این کد میتونی تاریخ شمسی رو که از دیتابیس خوندی و در یک string قراردادی به تاریخ میلادی تبدیل کنی. حالا میتونی هر نوع مقایسه یا محاسبه ای رو روش انجام بدی. مثلا اینکه از تاریخ امروز چقدر فاصله داره و الی آخر...


//a sample persian date
const string persianDate = "1388/07/12";

//get date parts (year, month, day) from persian date string
string[] persianDatePart = persianDate.Split('/');

//initialize persian calendar
var pc = new PersianCalendar();

//convert persian date to gregorian date
DateTime gregorianDate = pc.ToDateTime(Int32.Parse(persianDatePart[0]), Int32.Parse(persianDatePart[1]),
Int32.Parse(persianDatePart[2]), 0, 0, 0, 0);

اگه متوجه نشدی بگو تا بیشتر توضیح بدم.
موفق باشی

saninnnnnnnn
سه شنبه 10 شهریور 1388, 08:32 صبح
ممنون از همگی
من دقیقا مثل این چیزی که گفتید انجام می دم ولی میگه این نوع را نمیتونم کم کنم؟

string Datee = FarsiLibrary.Utils.PersianDate.Now.Year.ToString() + "/" +
FarsiLibrary.Utils.PersianDate.Now.Month.ToString( ) + "/" +
FarsiLibrary.Utils.PersianDate.Now.Day.ToString();

objConnection.Open();
SqlDataAdapter daa = new SqlDataAdapter("SELECT fulls FROM T_buy",
objConnection);
daa.Fill(dt);
if (dt.Rows.Count > 0)
{
DateTime ss = Convert.ToDateTime(dt.Rows[0]["fulls"]);
Int32 f = datee - ss;

string[] f = ss;
string[] fullss = ss.Split('/');
var pc = new PersianCalendar();
DateTime ful = pc.ToDateTime(Int32.Parse(fullss[0]), Int32.Parse(fullss
[1]), Int32.Parse(fullss[2]), 0, 0, 0, 0);

Int32.Parse(ss[2]), 0, 0, 0, 0);
// Int32 ddddt = Convert.ToInt32(datee) - Convert.ToInt32(ful);
if (f> 1)
{

شاید کلا قاطی کردم میشه دقیقا بگین
تاریخ جاری را در چی بریزم؟string نمیشه
یا آن تاریخ را که از بانک برمی دارم به چه تبدیل کنم که error نده

mn_zandy63
پنج شنبه 12 شهریور 1388, 15:21 عصر
ببینم تاریخ رو چه شکلی توی دیتابیست ذخیره کردی؟
تاریخ شمسی هست؟ میلادیه؟
اگه شمسی هست، این کدت معنی نمیده:

DateTime ss = Convert.ToDateTime(dt.Rows[0]["fulls"]);

نکته دیگه، مگه نمیخوای 24 ساعت رو چک کنی، معنیش اینه که مثلا اگه حرکت ساعت 3 بعد از ظهر فردا باشه تا 3 بعد از ظهر امروز cancel کنم نصف رو بهم پس میدی یا اینکه ساعت مهم نیست؟ و هر ساعتی از امروز بخوام cancel کنم فرق نداره.