# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ >  تعداد روزهای ماه ها؟

## benyamin_pc

تعداد روزهای ماه های شمسی  همیشه ثابتن به جز اسفند که بعضی سالها 29 و بعضی 30 میشه 
اولین سوالم اینه که کی ها 29 و کی ها 30 میشه و چند سال در میونه و آیا تغییرش رواله مشخصی داره؟
دومین سوالم اینه که مثل ماه های شمسی ماه های میلادی و قمری هم بگین چند روزن و تغییراتش که مثل اسفند ثابت نیستن کدوماستو طبق چی متغییرن
با تشکر

----------


## hamed_hossani

سلام
این کلاس پرشین دیت(تاریخ شمسی) است امیدوارم بدردت بخوره!

----------


## Hajivandian

سلام، فکر می کنم که ضمیمه دوستمون مشکلت رو حل کنه ولی برای آگاهی بیشتر نظرت رو به متنی از MSDN که خودم ترجمه کردم جلب می کنم:

http://msdn.microsoft.com/en-us/libr...ncalendar.aspx

ترجمه :




> تـقویم فارسـی در بیشـتر کـشورهایی کـه به زبان فارسـی صحبت می کنند مورد استفاده است، گر چه در برخی مناطق از اسامی متفاوتی برای نام ماه ها استفاده می شود. تقویم فارسی، تقویم رسمی کشورهای ایران و افغانستان است و در مناطقی همچون قزاقستان و تاجیکستان به عنوان تقویم ثانویه استفاده می شود.
> تاریخ مبداء تقویم فارسی بر اساس سال هجری که برابر با سال 622 میلادی و سال هجرت حضرت محمد ( ص ) از مکـه به مدینه است، می باشد. برای مثـال تاریخ 2002/21 مـارس میلادی برابر است با اولین روز ماه فروردین در سال 1381 بر طبق تاریخ فارسی.
> تـقویم فارسی بر پایه سال خـورشیدی است و تقریباً  365 روز به طول می انجامد. یک دوره سالانه 4 فصل است و سال جدید با پدیدار شدن خورشید در عرض خط استوا که از نیم کره جنوبی و نیم کره شمالی در مرکز زمین مشاهده می شود، آغاز می گردد. آغاز سـال جدید اولین روز ماه فروردین را نشان می دهد که اولین روز بهار در نیم کره شمالی است.
> در تـقویم فارسی، 6 ماه اول هر کدام 31 روز، 5 ماه بعد از آن هر کدام 30 روز و آخرین ماه سال 29 روز در سال عادی و 30 روز در سال کبیسه می باشد. سال کبیسه سالی است که وقتی آن را بر 33 تقسیم کنیم، باقی مانده آن یکی از اعداد زیر است :
> 1 ، 5 ، 9 ، 13 ، 17 ، 22 ، 26 ، 30
> به عنوان مثال، سال 1370 کبیسه است زیرا حاصل تقسیم آن بر 33 برابر 17 است. در یک دوره 33 ساله تقریباً 8 سال کبیسه وجود دارد.

----------


## sorooshk

سلام
در C#‎.Net شما می توانید از کلاس PersianCalendar که در Namespace ای به نام usign System.Globalization موجود می باشد استفاده نمایید.
اگر نیاز داشته باشید خیلی راحت توسط این کلاس هم میتونید تاریخ شمسی را استفاده کنید که خودش همه کاری را برای شما انجام میده و هم میتونید توسط متدهایی که داره متوجه بشید که آیا یک روز یا یک ماه یا یک سال کبیسه هست یا نه؟

مثل زیر:

 

PersianCalendar PC = newPersianCalendar();
MessageBox.Show(PC.IsLeapYear(1390).ToString());



در مثال بالا سال 1390 را به PersianCalendar میدهیم و به ما میگه که آیا اون سال کبیسه هست یا نه.
ضمنا توسط دستور های IsLeapDay و IsLeapMonth هم میتونید متوجه بشین که آیا یک روز و یا یک ماه خاص کبیسه هست یا نه.

----------


## benyamin_pc

از همه دوستان نهایت تشکرو دارم اما چون باید تقویم شمسی و قمری را خودم بنویسم و از میلادی به اینها برسم بیشتر پست شماره 3 به کارم اومد اما شمسی کامل متوجه شدم و قمری هم مشابه این که پائین می نویسم لازم دارم ازش بدونم
تقویم شمسی همیشه 6 ماه اولش 31 روز خواهد بود
تقویم شمسی 5 ماه بعدش هم همیشه 30 روز خواهد بود
تقویم شمسی ماه آخرش یا 29 روز است یا 30 روز که همیشه 3 سال 29 و 1 سال 30 روز می شود
همیشه تقویم شمسی و میلادی تارخ مشابهی دارن یعنی همیشه 11 دی برابر 31 جانویه است و ...
اگر از دوستان به همین حالت کسی می تونه برای قمری هم تشریح کنه ممنون میشم

----------


## Hajivandian

باید بگم که کامل متوجه نشدی، دو مورد اولی که گفتی همیشه درسته ولی دو مورد بعدی اینطور نیست:
1 - تو ترجمه نوشته بودم که تو یک دوره 33 ساله 8 سال کبیسه داریم، یعنی 7 تاش هر 4 سال یک بار و آخریش بعد از 5 سال اتفاق می افته!. و این دوره مرتب تکرار می شه.
2 - توی سال های کبیسه تاریخ تقویم شمسی با میلادی یک اختلاف 1 روزه و البته مطمئن نیستم شاید در بعضی مواقع یک اخلاف 2 روزه داره.

در نهایت هم کد تقویم شمسی رو که با همین الگوریتم که برات توضیح دادم و قبلا تو vb6 نوشته بودم رو برات ضمیمه می کنم.

----------


## Salar Ashgi

کد زیر رو هم تست کنید :


  PersianCalendar pc = new PersianCalendar();
            DateTime dt = DateTime.Now;
            MessageBox.Show(pc.GetDaysInMonth(pc.GetYear(dt), pc.GetMonth(dt)).ToString());


فضای نام System.Globalization فراموش نشه .

موفق باشید ./

----------


## senaps

تقویم قمری رو فک کنم از روی ماه تنظیم میکنن و برا هر ساعت فرق میکنه....مثلا 1 رضمان ایران،با 1 رمضان بقیه ی کشور های دنیا فرق میکنه همچنین اخرش....ولی سایر روزها برابره....

----------


## benyamin_pc

> باید بگم که کامل متوجه نشدی، دو مورد اولی که گفتی همیشه درسته ولی دو مورد بعدی اینطور نیست:
> 1 - تو ترجمه نوشته بودم که تو یک دوره 33 ساله 8 سال کبیسه داریم، یعنی 7 تاش هر 4 سال یک بار و آخریش بعد از 5 سال اتفاق می افته!. و این دوره مرتب تکرار می شه.
> 2 - توی سال های کبیسه تاریخ تقویم شمسی با میلادی یک اختلاف 1 روزه و البته مطمئن نیستم شاید در بعضی مواقع یک اخلاف 2 روزه داره.
> 
> در نهایت هم کد تقویم شمسی رو که با همین الگوریتم که برات توضیح دادم و قبلا تو vb6 نوشته بودم رو برات ضمیمه می کنم.


 درسته توی چیزی که نوشته بودین همین طوره که میگین اما قبلش تو سرچهام خونده بودم 3 سال 28 و 1 سال 29 و تصور داشتم شماهم همینو نوشتین که به ادامه مطلبتون دقت نکردم که اونو گفتم اما اگه دقیق ترش اونه که نوشتین بسیار هم عالی . اما منظورم این بودکه برای قمری هم به همین شیوه چند خطی که نوشتم داستان قمری هم اگه کسی میدونه به ما هم بگه ممنون میشم

----------


## Hajivandian

یه کتاب به نام Calendrical Calculations هست که زیر و بم تمام تقویم های جهان رو توش نوشته ( حتی اونها که منقرض شدن! ) زبانش انگلیسیه، کتاب کامل و خوبیه لینک دانلودش رو برات گذاشتم

http://www.wupload.com/file/w867/915...-N.-Dershowitz

----------

