PDA

View Full Version : کم کردن 2 تاریخ شمسی از هم



tc1000
سه شنبه 25 اردیبهشت 1386, 04:15 صبح
سلام
من 3 تا Combo BOXگذاشتم و توی یکی روز بعدی ماه و در اخر سال رو قرار دادم. و به همین صورت 4 تای دیگه رو در زیر این قرار دادم حالا یوزر میاد سال - ماه و روز اولی رو انتخاب میکنه و بعد میاد پایینی ها رو هم انتخاب میکنه حالا میخوا این دوتا رو از هم کم کنم و تعداد روز میان این دو تاریخ رو حساب کنم.
در ضمن تاریخ هایی هم که انتخاب میشن بصورت شمسی هستند

farid_nasiri
سه شنبه 25 اردیبهشت 1386, 10:04 صبح
برای این منظور دو تاریخ استخراج شده از COMBO ها رو به فرمت YYYY/MM/DD در دو متغیر ازنوع DATE ذخیره کن. بعد از تابع DATEDIFF استفاده کن.
این تابع براش فرقی نداره ورودی شمسی بگیره یا میلادی

babi_wd
سه شنبه 25 اردیبهشت 1386, 11:25 صبح
با PersianCalendar class به میلادی تبدیل کن
بعد مقایسه

__H2__
سه شنبه 25 اردیبهشت 1386, 11:32 صبح
سلام
به نظرم روش کاربر babi_wd (http://www.barnamenevis.org/forum/member.php?u=14648) بهتر است.
تاریخ ها را به میلادی تبدیل کن و از هم کم کن . مجدداً به شمسی تبدیل کن!
کمی شاید زیاد به نظر برسد ولی خیلی مطمئن و بی نقص است.

sarasara
سه شنبه 25 اردیبهشت 1386, 11:36 صبح
دو تاریخ رو به میلادی تبدیل کن(کدش تو همین سایت هست، جستجو کن پیدا می کنی):



DateTime d1 = ....
DateTime d2 = ....
TimeSpan differ = d1.Subtract(d2);

sarasara
سه شنبه 25 اردیبهشت 1386, 12:54 عصر
سلام،
اطلاعات Combo ها رو با هم جمع کن به فرمت تاریخ تیدیل کن (1385/10/10) و در string بریز و بعد String ها رو جای تاریخهایی که من گذاشتم بذار و از هم کم کن.

DateTime d1 = Convert.ToDateTime("1385/10/10");
DateTime d2 = Convert.ToDateTime("1385/12/10");
TimeSpan differ = d2.Subtract(d1);
Response.Write(differ.Days); امیدوارم جواب بگیری

__H2__
سه شنبه 25 اردیبهشت 1386, 13:44 عصر
سلام،
اطلاعات Combo ها رو با هم جمع کن به فرمت تاریخ تیدیل کن (1385/10/10) و در string بریز و بعد String ها رو جای تاریخهایی که من گذاشتم بذار و از هم کم کن.

DateTime d1 = Convert.ToDateTime("1385/10/10");
DateTime d2 = Convert.ToDateTime("1385/12/10");
TimeSpan differ = d2.Subtract(d1);
Response.Write(differ.Days); امیدوارم جواب بگیری

سلام
این اصلاً جواب نمیدهد و اگر هم بدهد کاملاً شانسی و متزلزل خواهد بود.
تعداد روزها در ماههای میلادی با ما برابر نیست در نتیجه در شکستن یک ماه به تعداد روز دچار مشکل و عدم صحیح کار کردن میشود از آن گذشته به همان علت نابرابری تعغداد روزها اگر تعداد روزها بیشتر از تعداد روزهای مجاز در ماه میلادی باشد اجرای این خطوط کلاً خطا میدهد، مثلاً ماه دوم ما 31 روزه است در حالی که در میلادی 28 و 29 روزه است! اگر شما تاریخ 30/2/1385 را وارد کنید فوراً باعث خطا میشود و نمونه های این لب مرزی زیاد است و تازه اگر هم درست تبدیل شود بازهم جواب دقیق نمیدهد. میتوانید امتحان کنید.

باید از تبدیلات شمسی استفاده کرد.

tc1000
چهارشنبه 26 اردیبهشت 1386, 02:42 صبح
بله دقیقا همین مشکل رو داره یعنی وقتی تاریخ 1/1/1386 رو از 31/2/1386 کم می کنیم خطا میگیره میشه بگید باید چه کاری انجام بدم.

__H2__
چهارشنبه 26 اردیبهشت 1386, 11:20 صبح
سلام
دل انگیز بابا! راهی جز تبدیل ندارید!
مثلاً کد زیر دو تاریخ را از هم کم میکند و اختلافشان را به روز (تعداد روز) به شما میدهد.


Dim convert As New System.Globalization.PersianCalendar
Dim DayDiff As Integer = (convert.ToDateTime(1388, 1, 1, 12, 0, 0, 0) - convert.ToDateTime(1386, 2, 31, 12, 0, 0, 0)).Days

ealireza
چهارشنبه 26 اردیبهشت 1386, 12:02 عصر
بله دقیقا همین مشکل رو داره یعنی وقتی تاریخ 1/1/1386 رو از 31/2/1386 کم می کنیم خطا میگیره میشه بگید باید چه کاری انجام بدم.
سعی کن 1/1/1386 رو بصورت 1386/1/1 در بیاری !
سعی کن دو تاریخ به فرمت زیر در بباری و اونا رو با یک New Date تبدیل به جنس DATE کن !
یعنیباید String تاریخ فارسی تبدیل به جنس DATE بشه !!
برای درست کردن این فرمت (YYYY/MM/DD) بصورت زیر عمل کن :



MyDate as date = New Date(Year,Month, Day, hour, min, sec)


خیلی ساده هست Month و DATE رو با SubString و یا یک Regex میتونی در بیاری
در این صورت 100% این کار عملیه !


نهایتا میتونی اونا رو از هم Subtract کنی :)
موفق باشید

صابر
چهارشنبه 26 اردیبهشت 1386, 12:03 عصر
نظرتون در مورد این کد چیه؟


public int GetDaysBetweenTwoDates(string FirstPersianDate, string SecondPersianDate)
{
if (!IsValidPersianDate(FirstPersianDate))
throw new Exception("فرمت تاریخ اول اشتباه است.");

if (!IsValidPersianDate(SecondPersianDate))
throw new Exception("فرمت تاریخ دوم اشتباه است.");

FirstPersianDate = FormatPersianDate(FirstPersianDate);
SecondPersianDate = FormatPersianDate(SecondPersianDate);

PersianCalendar pdDates = new PersianCalendar();

int FirstYear = Convert.ToInt16(FirstPersianDate.Substring(0, 4));
int FirstMonth = Convert.ToInt16(FirstPersianDate.Substring(5, 2));
int FirstDay = Convert.ToInt16(FirstPersianDate.Substring(8, 2));

DateTime dtFirst = pdDates.ToDateTime(FirstYear, FirstMonth, FirstDay, 10, 0, 0, 0);

int SecondYear = Convert.ToInt16(SecondPersianDate.Substring(0, 4));
int SecondMonth = Convert.ToInt16(SecondPersianDate.Substring(5, 2));
int SecondDay = Convert.ToInt16(SecondPersianDate.Substring(8, 2));

DateTime dtSecond = pdDates.ToDateTime(SecondYear, SecondMonth, SecondDay, 10, 0, 0, 0);

long ticks = dtSecond.Ticks - dtFirst.Ticks;
int r = 0;
if (ticks > 0)
{
DateTime dtnew = new DateTime(ticks);
r = (dtnew.Year - 1) * 365 + (dtnew.DayOfYear - 1);
}
else if (ticks < 0)
{
ticks = (dtFirst.Ticks - dtSecond.Ticks);
DateTime dtnew = new DateTime(ticks);
r = ((dtnew.Year - 1) * 365 + (dtnew.DayOfYear - 1)) * -1;
}
else if (ticks == 0) r = 0;
return r;
}

bemilove
یک شنبه 05 شهریور 1391, 10:53 صبح
فرض کنیم د رکوئری دو ستون داشته باشیم که تاریخ به صورت مثلا 13910605 ودیگری 13850206 باشد .چگونه اختلاف این دو تاریخ را به سال در ستون دیگر محاسبه کنیم .؟؟؟ فقط اختلاف سال را نشان دهد

fakhravari
یک شنبه 05 شهریور 1391, 13:51 عصر
ساب استرینت.
SubString