نوشته شده توسط
novinmehran
سلام میشه سال رو هم روی این اضافه کنین که سال رو هم نشون بده
فرضا ورودی مساله 1000 روز هست :
var days = 1000;
و تقویم شمسی رو بکار می بریم :
var persian = new System.Globalization. PersianCalendar();
یک تاریخی رو مبنا قرار می دهیم، که در اینکه چه روز هایی کبیسه باشه تاثیر داره :
var baseDate = persian.ToDateTime( 1400, 1, 1, 0, 0, 0, 0); // 1400/01/01
و تاریخ نهایی هم که فلان تعداد روز بعد از اون تاریخ مبنا است :
var finalDate = persian.AddDays( baseDate, days);
ابتدا اونقدر سال پیشروی می کنیم که از تاریخ مبنا به سال نهایی برسیم :
var year = 0;
while (persian.AddYears( baseDate, 1) <= finalDate)
{
year++;
baseDate = persian.AddYears( baseDate, 1);
}
سپس اونقدر ماه پیشروی می کنیم تا به سال و ماه نهایی برسیم :
var month = 0;
while (persian.AddMonths( baseDate, 1) <= finalDate)
{
month++;
baseDate = persian.AddMonths( baseDate, 1);
}
و نهایتا اونقدر روز پیشروی می کنیم تا به سال و ماه و روز نهایی برسیم :
var day = 0;
while (persian.AddDays( baseDate, 1) <= finalDate)
{
day++;
baseDate = persian.AddDays( baseDate, 1);
}
و سال و ماه و روز در طی سه پیشروی شمارش شده :
MessageBox.Show( "Year = " + year + " Month = " + month + " Day = " + day);
var days = 1000;
var persian = new System.Globalization. PersianCalendar();
var baseDate = persian.ToDateTime( 1400, 1, 1, 0, 0, 0, 0); // 1400/01/01
var finalDate = persian.AddDays( baseDate, days);
var year = 0;
while ( persian.AddYears( baseDate, 1) <= finalDate)
{
year++;
baseDate = persian.AddYears( baseDate, 1);
}
var month = 0;
while ( persian.AddMonths( baseDate, 1) <= finalDate)
{
month++;
baseDate = persian.AddMonths( baseDate, 1);
}
var day = 0;
while ( persian.AddDays( baseDate, 1) <= finalDate)
{
day++;
baseDate = persian.AddDays( baseDate, 1);
}
MessageBox.Show( "Year = " + year + " Month = " + month + " Day = " + day);