PDA

View Full Version : سوال: جمع و تفریق روز از تاریخ شمسی



shahin60
جمعه 13 خرداد 1390, 21:56 عصر
من میخوان مثا تاریخ روز +10 کنم یا منهای 5 چه باید کرد
مثال 1389/01/01 -5

amireto
جمعه 13 خرداد 1390, 22:55 عصر
دوست عزيز من از روش زير استفاده مي كنم


PersianCalendar PCalendar = new PersianCalendar();
txtNaghd.text = PCalendar.GetDayOfMonth(DateTime.Now.AddDays(10)). ToString();

البته با اين كد فقط روز را محاسبه كردم از همين روش ميتوني ماه و سال رو هم محاسبه كني

amireto
جمعه 13 خرداد 1390, 23:17 عصر
البته يكي از دوستان در همين سايت براي تاريخ شمسي چنين كلاسي رو معرفي كردند


public static class ShamsiDate
{
static PersianCalendar persianCalendar = new PersianCalendar();
public static string ToShamsi(this DateTime miladiDate)
{
string year = persianCalendar.GetYear(miladiDate).ToString();
string month = persianCalendar.GetMonth(miladiDate).ToString().Pa dLeft(2, '0');
string day = persianCalendar.GetDayOfMonth(miladiDate).ToString ().PadLeft(2, '0');
return year + "/" + month + "/" + day;
}

public static DateTime ToMiladi(this string shamsiDate)
{
int year = int.Parse(shamsiDate.Substring(0, 4));
int month = int.Parse(shamsiDate.Substring(5, 2));
int day = int.Parse(shamsiDate.Substring(8, 2));
return persianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
}
}

اگر از اين كلاس استفاده كنيد
مثال:


MessageBox.Show( DateTime.Now.AddDays(10).ToShamsi());

براي كسر هم عدد منفي بده

shahin60
شنبه 14 خرداد 1390, 09:20 صبح
[/CODE]
اگر از اين كلاس استفاده كنيد
مثال:


MessageBox.Show( DateTime.Now.AddDays(10).ToShamsi());

براي كسر هم عدد منفي بده

دوست عزیز تاریخ من صرفا تاریخ روز نیست من میخوام به تاریخ شمسی ذخیره شده تو بانکم چند روز اضافه کنم
کلاس بالا چطوری فراخوانی میشه هر کاری کردم نشد؟

shahin60
شنبه 14 خرداد 1390, 09:38 صبح
چطوری میشه ازش کم کرد؟

imanamami
شنبه 14 خرداد 1390, 09:57 صبح
سلام دوست عزیز باید یک کلاس جمع و تفریق ایجاد کنید.

imanamami
شنبه 14 خرداد 1390, 09:58 صبح
public string time(string BackTime, string Month_Last, string NowTime_Last)
{
long Month = Convert.ToInt32(Month_Last);
long Year_Now = Convert.ToInt64(NowTime_Last.Trim().Substring(0, 4)), Month_Now = Convert.ToInt64(NowTime_Last.Trim().Substring(5, 2)), Day_Now = Convert.ToInt64(NowTime_Last.Trim().Substring(8, 2));
if (Month != 0)
{
if (Month >= 12)
{
Year_Now += (Month / 12);
Month -= ((Month / 12) * 12);
}
if ((Month_Now + Month) <= 12)
{
Month_Now += Month;
}
else
{
Month_Now += Month - 12;
Year_Now++;
}
}
if (Month_Now > 6 && Day_Now == 31)
Day_Now--;
BackTime = string.Format("{0}/{1:d2}/{2:d2}", Year_Now, Month_Now, Day_Now);
return BackTime;
}

imanamami
شنبه 14 خرداد 1390, 09:58 صبح
اینم کلاس جمع تاریخ است.یکی به تاریخ فعلی زیاد می کنه.
موفق باشید

imanamami
شنبه 14 خرداد 1390, 10:02 صبح
اینم هست
namespace Abshar
{
class PlusDay
{
public string time(string Status, string Day_Last, string NowTime_Last)
{

string aa=NowTime_Last.Substring(5, 2);
long Day = Convert.ToInt64(Day_Last);
long Year_Now = Convert.ToInt64(NowTime_Last.Trim().Substring(0, 4)), Month_Now = Convert.ToInt64(NowTime_Last.Trim().Substring(5, 2)), Day_Now = Convert.ToInt64(NowTime_Last.Trim().Substring(8, 2));
if (Status == "1")
{
Plus:
if (Day != 0)
{
if (Day >= 1)
{
if (Month_Now <= 6 && Day_Now <= 31)
{
if (Day_Now == 31)
{
Month_Now++;
Day_Now = 1;
}
else
Day_Now++;
}
else if (Month_Now > 6 && Day_Now <= 30)
{
if (Day_Now == 30)
{
if (Month_Now == 12)
{
Year_Now++;
Month_Now = 1;
Day_Now = 1;
}
else
{
Month_Now++;
Day_Now = 1;
}
}
else
Day_Now++;
}
}
if (Day != 0)
{
Day--;
goto Plus;
}
}
else
return Status = string.Format(" {0}/{1:d2}/{2:d2}", Year_Now, Month_Now, Day_Now);
}
if (Status == "0")
{
Minez:
if (Day != 0)
{
if (Day >= 1)
{
if (Month_Now <= 6 && Day_Now >= 1)
{
if (Day_Now == 1)
{
if (Month_Now == 1)
{
Year_Now--;
Month_Now = 12;
Day_Now = 30;
}
else
{
Month_Now--;
Day_Now = 31;
}
}
else
Day_Now--;
}
else if (Month_Now > 6 && Day_Now >= 1)
{
if (Day_Now == 1)
{
Month_Now--;
Day_Now = 30;
}
else
Day_Now--;
}
}
if (Day != 0)
{
Day--;
goto Minez;
}
}
else
return Status = string.Format(" {0}/{1:d2}/{2:d2}", Year_Now, Month_Now, Day_Now);
}
return Status;
}
}
}

Reza_Yarahmadi
شنبه 14 خرداد 1390, 10:03 صبح
ميتونيد بصورت زير عمل كنيد
System.Globalization.PersianCalendar p = new System.Globalization.PersianCalendar();
DateTime dt = p.ToDateTime(1390, 3, 14, 0, 0, 0, 0);
dt = dt.AddDays(10);
MessageBox.Show(p.GetYear(dt) + "/" + p.GetMonth(dt) + "/" + p.GetDayOfMonth(dt));

shahin60
شنبه 14 خرداد 1390, 12:33 عصر
با تشکر از جواب های دوستان :لبخندساده:
فقط یه نکته من فقط به تاریخ روز نمی خوام اضافه کنم آیا با کلاس فوق حل میشه؟ مثلا سال گذشته 5-1389/05/21

amireto
شنبه 14 خرداد 1390, 16:40 عصر
دوست عزیز تاریخ من صرفا تاریخ روز نیست من میخوام به تاریخ شمسی ذخیره شده تو بانکم چند روز اضافه کنم
کلاس بالا چطوری فراخوانی میشه هر کاری کردم نشد؟

دوست عزيز
همونطور كه ديدي راههاي زيادي است
طبق روش من ابتدا بهتره تاريخ شمسي كه داري به نوع datetime تبديل كني اونوقت از تابع addDay براي جمع و تفريق استفاده كن و سپس دوباره به شمسي برگردون
براي استفاده از كلاس هم خيلي ساده با استفاده ازAdd new item يك كلاس با همين نام و كد به پروژه اضافه كن



چطوری میشه ازش کم کرد؟

همون طور كه گفتم به جاي عدد مثبت عدد منفي بگذار


MessageBox.Show( DateTime.Now.AddDays(-10).ToShamsi());

shahin60
شنبه 14 خرداد 1390, 17:00 عصر
1
MessageBox.Show( DateTime.Now.AddDays(-10).ToShamsi());



نه دوست من من کلاسو ایجاد کردم الان میخوام تو فرم ازش استفاده کنم چطور فراخوانی کنمش
منظورم نمونه ساختن ازشه
ToShamsi()); نمی شناسه
بعد چطوری بگم به این تاریخ میلادی اضافه کنه نه تاریخ امروز

amireto
شنبه 14 خرداد 1390, 17:54 عصر
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace نم اسپيس پروژت
{
public static class ShamsiDate
{
static PersianCalendar persianCalendar = new PersianCalendar();
public static string ToShamsi(this DateTime miladiDate)
{
string year = persianCalendar.GetYear(miladiDate).ToString();
string month = persianCalendar.GetMonth(miladiDate).ToString().Pa dLeft(2, '0');
string day = persianCalendar.GetDayOfMonth(miladiDate).ToString ().PadLeft(2, '0');
return year + "/" + month + "/" + day;
}

public static DateTime ToMiladi(this string shamsiDate)
{
int year = int.Parse(shamsiDate.Substring(0, 4));
int month = int.Parse(shamsiDate.Substring(5, 2));
int day = int.Parse(shamsiDate.Substring(8, 2));
return persianCalendar.ToDateTime(year, month, day, 0, 0, 0, 0);
}
}
}

همين كلاس رو اضافه كن و ديگر نبايد كاري كني
نوع داده اي dataTime درست كن و تاريختو درونش قرار بده
حال ازش اضافه كن


DataTime dt=New DataTime();
dt=???;
dt.AddDays(-10)

shahin60
شنبه 14 خرداد 1390, 18:23 عصر
بازم toshamsi() نمی شناسه

shahin60
شنبه 14 خرداد 1390, 18:30 عصر
حل شد دمت گرم