فاطمه طاهریان

Fatemeh Taherian
29 - پیام , 5578 - نظر

تاریخ میلادی به شمسی

 

لطفا اگر قصد استفاده از این الگوریتم را دارید حتما مطلبی که با عنوان تذکردر وبلاگم قرار داده ام را بخوانید


الگوریتم تبدیل تاریخ میلادی به تاریخ شمسی :

تبدیل تاریخ میلادی به شمسی بسیار راحتتر از تبدیل تاریخ شمسی به میلادی است.

برای نوشتن این الگوریتم به اختلاف روزهای میان اولین روز سال میلادی و اولین روز سال شمسی نیاز داریم که این اختلاف روز(در صورتی که سال کبیسه باشد یا نباشد) "79" روز است.

برای تشخیص کبیسه بودن یا نبودن سال از روش زیر استفاده می کنیم:
اگر سال داده شده بر100و400 بخشپذیر باشد" یا بر" 100 بخشپذیر نباشد بر 4 بخشپذیر باشد" آنگاه سال کبیسه است، در غیر این صورت سال کبیسه نیست.
با توجه به کبیسه بودن یا کبیسه نبودن سال مشخص می کنیم که در کدامین روز سال میلادی قرار داریم.

دو حالت پیش می آید:

  • روزی که در آن قرار داریم از 79 بیشتر است
    به این معنی است که در ماههای بعد از فروردین قرار داریم.

حال باید مشخص کنیم که در 6 ماه اول سال شمسی قرار داریم یا در 6 ماه دوم سال قرار داریم،
برای اینکار ابتدا 79 روز از تعداد روزها کم می کنیم تا در اول فروردین قرار بگیریم حال اگر تعداد روزها از "186"(31*6) کمتر باشد یعنی در 6 ماه اول سال شمسی قرار داریم در غیر اینصورت در 6 ماه دوم قرار داریم.

  1. اگر در 6 ماه اول سال قرار گرفته باشیم :تعداد روزها را بر "31" تقسیم می کنیم(6 ماه اول در سال شمسی 31 روزه است.)
    اگر باقیمانده این تقسیم صفر شد خارج قسمت تقسیم برابر با ماه شمسی می شود و روز شمسی برابر با 31 می شود.
    اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه یک می شود و روز شمسی همان باقیمانده است.

  2. اگر در 6 ماه دوم سالقرار گرفته باشیم : "186" روز از تعداد روزها کم می کنیم و آن را بر "30" تقسیم می کنیم .
    اگرباقیمانده این تقسیم صفر شد خارج قسمت تقسیم باضافه"6" برابر با ماه شمسی می شودو روز شمسی برابر با30 می شود.
    اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه"7" می شودو روز شمسی همان باقیمانده است.

سال شمسی از تفاضل سال میلادی با"621" بدست می آید.

  • روزی که در آن قرار داریم کمتر از"79"است
             که این به این معنی است که درروزهایی بین اولین روزسال میلادی تا اولین روز شمسی (ماههای دی ،بهمن و اسفند)قرار داریم.

اختلاف روز بین اولین روز سال میلادی داده شده و اولین روز دی ماه در سال شمسی را در نظر می گیریم که این اختلاف برای سال کبیسه"11" و برای غیر کبیسه "10" است.*دقت کنید که در این الگوریتم برای مشخص کردن این اختلاف باید سال قبل از  سال داده شده را در نظر بگیریم زیرا سال قبل بر روی اولین روز سال میلادی تاثیر می گزارد.*

اختلاف روز با تعداد روز محاسبه شده جمع می کنیم ، آن را بر"30" تقسیم می کنیم(3 ماه آخر سال شمسی 30 روزه است.).
اگر باقیمانده این تقسیم صفر شود خارج قسمت تقسیم باضافه"9" برابر با ماه شمسی می شودو روز شمسی برابر با"30" می شود.
اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت  باضافه"10"می شودو روز شمسی همان باقیمانده است.

در این حالت سال شمسی از تفاضل سال میلادی با"622" بدست می آید.(زیرا در سال قبل قرار داریم.)

 

پیاده سازی الگوریتم به زبان c :

typedef struct _SHAMSIDATE
{
    int iYear;
    int iMonth;
    int iDay;
}SHAMSIDATE;

SHAMSIDATE MiladiToShamsi(int iMiladiMonth,int iMiladiDay,int iMiladiYear)
{

    int  shamsiDay, shamsiMonth, shamsiYear;
    int  dayCount,farvardinDayDiff,deyDayDiff ;
    int  sumDayMiladiMonth[] = {0,31,59,90,120,151,181,212,243,273,304,334};
    int  sumDayMiladiMonthLeap[]= {0,31,60,91,121,152,182,213,244,274,305,335};
    SHAMSIDATE  shamsidate;

 farvardinDayDiff=79;

if (MiladiIsLeap(iMiladiYear))
 {
    dayCount = sumDayMiladiMonthLeap[iMiladiMonth-1] + iMiladiDay;
 }
else
 {
    dayCount = sumDayMiladiMonth[iMiladiMonth-1] + iMiladiDay;
 }
if((MiladiIsLeap(iMiladiYear - 1)))
 {
    deyDayDiff = 11;
 }
else
 {
    deyDayDiff = 10;
 }
if (dayCount > farvardinDayDiff)
{
    dayCount = dayCount - farvardinDayDiff;
    if (dayCount <= 186)
     {
      switch (dayCount%31)
       {
        case 0:
         shamsiMonth = dayCount / 31;
         shamsiDay = 31;
        break;
        default:
         shamsiMonth = (dayCount / 31) + 1;
         shamsiDay = (dayCount%31);
        break;
      }
      shamsiYear = iMiladiYear - 621;
     }
   else
     {
    dayCount = dayCount - 186;
    switch (dayCount%30)
      {
       case 0:
        shamsiMonth = (dayCount / 30) + 6;
        shamsiDay = 30;
       break;
     default:
       shamsiMonth = (dayCount / 30) + 7;
       shamsiDay = (dayCount%30);
       break;
     }
      shamsiYear = iMiladiYear - 621;
    }
  }
else
  {
    dayCount = dayCount + deyDayDiff;

    switch (dayCount%30)
    {
    case 0 :
      shamsiMonth = (dayCount / 30) + 9;
      shamsiDay = 30;
     break;
    default:
      shamsiMonth = (dayCount / 30) + 10;
      shamsiDay = (dayCount%30);
     break;
    }
    shamsiYear = iMiladiYear - 622;

  }
    shamsidate.iYear = shamsiYear;
    shamsidate.iMonth = shamsiMonth;
    shamsidate.iDay = shamsiDay;

  return shamsidate ;
}

// the function check a miladiyear is leap or not.
BOOL MiladiIsLeap(int miladiYear)
{
if(((miladiYear % 100)!= 0 && (miladiYear % 4) == 0) || ((miladiYear % 100)== 0 && (miladiYear % 400) == 0))
  return TRUE;
else
  return FALSE;
}

ارسال شده در تاریخ ۲۸ فروردین ۱۳۸۴ - 5:24 عصر

نظرات

# پاسخ به: تاریخ میلادی به شمسی  

با سلام و خسته نباشید.
ازاینکه این مطلب را در سایت خود گذاشتید،بسیار سپاسگذارم
با تشکر.
۵ خرداد ۱۳۸۴ - 11:12 صبح | ابراهیمی

# پاسخ به: تاریخ میلادی به شمسی  

in masale ye besyar jalebi ast ..vali ino bedoonin ke halle in masale ye ki az sade tarin masalehai ast ke dar daneshgah dar darse barname nevisi be daneshjooyan eraye mishavad va hal kardane an ziad sakht nist...ba in hal az shoma besyar moteshakeram e halle in masale ra dar site gharar dadin...mitavanad baraye daneshjooyan alaghe mand mofid vaghe shavad..moteshakeram...bye
۸ خرداد ۱۳۸۴ - 2:45 عصر | Dr siavash farrahy

# پاسخ به: تاریخ میلادی به شمسی  

با سلام و تشکر از شما . در تابع فوق از تابعی به نام MiladiIsLeap استفاده شده که مانع اجرای برنامه فوق می گردد.
امکان دارد این تابع را تشرح نمایید ؟
با تشکر
۱۴ تیر ۱۳۸۴ - 3:08 عصر | طالقانی

# پاسخ به: طالقانی  

سلام
در مورد تابع MiladiIsLeap باید بگم که من آن را در پایان تابع شمسی به میلادی قرار داده بودم و فراموش کرده بودم که در انتهای این تابع نیز قرار دهم، که این کار را انجام دادم

از توجه تان سپاسگزارم!
۱۴ تیر ۱۳۸۴ - 4:13 عصر | فاطمه

# پاسخ به: تاریخ میلادی به شمسی  

با سلام
باید اعتراف کنم کمتر کسی (خانم) مثل شما دیدم که اینطور فعال باشه و در ضمن از جوابتون ممنونم البته من توی وبلاگ خودم این رو اصلاح کردم وهمچین به زبان #C که خیلی نزدیک به هم بودند تبدیل کردم و با ذکر نام شما اونجا گذاشتم (اگر اجازه دهید) که سوالات دیگه ای برام پیش اومده اگر شما بتونید جوابم رو بدید ممنون می شم . http://rezachidatnet.blogfa.com
۱۵ تیر ۱۳۸۴ - 4:30 عصر | طالقانی

# پاسخ به: تاریخ میلادی به شمسی  

چطوری میشه تاریخ شمسی بدست اومده را تو یک فیلد date ذخیره کرد ؟ ممنون
۱۷ تیر ۱۳۸۴ - 1:18 عصر | طالقانی

# پاسخ به: تاریخ میلادی به شمسی  

اگر می شود سورس برنامه دلفی برای تاریخ میلادی به شمسی برایم بفرستید
با تشکر
۲۲ تیر ۱۳۸۴ - 10:49 صبح | ابراهیم

# پاسخ به: ابراهیم  

سلام
دلفی در زمینه کاری من نیست.
۲۲ تیر ۱۳۸۴ - 3:08 عصر | فاطمه

# پاسخ به: تاریخ میلادی به شمسی  

با تشکر از مطالب علمی شما

موفق باشید.....
۲ شهریور ۱۳۸۴ - 8:57 عصر | مالکی

# پاسخ به: تاریخ میلادی به شمسی  

با سپاس فراوان از شما و امید به موفقیت هر چه بیشترتان.
۷ شهریور ۱۳۸۴ - 3:25 صبح | علیرضا نظری

#  تاریخ میلادی به شمسی در ASP  

salam.man moghe sabte nam az afrad tarikhe milaD ro majbooram dar Db zakhire konam va soal ineke man hodoode 8 ya 10 saat ba serveram ekhtelafe saaat daram.chetori mitoonam kari konam ke moghe gozaresh gereftan az sabte nam ha dar rooze gozashte ya hamin emrrooooz tarikhe milaD ro estefade konam. shayad modire site bekhad ege ke az avale mehr ta be hala , khob oonvaght man chetori mitoonam in tarikh ro tabdil konam va too SQL query bezanam? mishe rahnamayem konid?

mamnooon misham

---
Jalil Abdollahi
۴ آذر ۱۳۸۴ - 8:36 صبح | Jalil

#  کمک تاریخ میلادی به شمسی در asp.net  

Ba salam mishe khahesh konam javabe in maile man ro bedin
be komake shoma niyaz daram : man in barname ra ba asp.net neveshtam va az lotfe shoma "algorithm" estefade nemodam .Amma yek rooz jolo tar raneshan midahad ,va man nemidonam bayad kojaye in algorithmo tagheer bedam khaheshan komakam konid va ma ra rahnamee nameed
۱۸ آذر ۱۳۸۴ - 5:38 عصر | Leily

# پاسخ به: تاریخ میلادی به شمسی  

ممنون از لطف شما .خیلی به دردم خورد و امیدوارم که همیشه شاد باشید و به تمام آرزوهای خوبتون برسین.
۱۸ آذر ۱۳۸۴ - 7:38 عصر | Leily

# پاسخ به: تاریخ میلادی به شمسی  

واقعاَ ممنون از لطف شما.
۱۱ دی ۱۳۸۴ - 11:33 صبح | محمد

# پاسخ به: تاریخ میلادی به شمسی  

Thanks for you.
۱۱ دی ۱۳۸۴ - 11:35 صبح | محمد

# پاسخ به: تاریخ میلادی به شمسی  

از این که این مطلب را در وبلاگ خود قرار دادید کمال تشکر را دارم
۱ فروردین ۱۳۸۵ - 1:58 صبح | ali

# پاسخ به: تاریخ میلادی به شمسی  

kheili kam hast mataleb
۷ فروردین ۱۳۸۵ - 6:32 عصر | parisa

# پاسخ به: تاریخ میلادی به شمسی  

سلام
ممنون می شم کمک کنید و پیاده سازی الگوریتم تبدیل شمسی و میلادی به هم در زبان c را برای من به همین آدرس میل کنید
متشکرم
۶ اردیبهشت ۱۳۸۵ - 12:35 صبح | hamid

# تشکر  

سلام فاطمه جون چطوری
خیلی باحالی
چند وقت بود دنبال این برنامه می گشتم تا این که .........................................
خیلی ازت ممنونم
با من اگه میشه در تماس باش شاید بهت بتونم کمک کنم(البته در چیزی غیر از این بر نامه نویسی c#)
۱۱ خرداد ۱۳۸۵ - 12:14 عصر | هادی

# پاسخ به: تاریخ میلادی به شمسی  

از این وبلاگتون خیلی خوشم اومده من تبدیل تاریخ را در دلفی می خواهم لطفا کمکم کنید
۱۱ خرداد ۱۳۸۵ - 1:11 عصر | امید

# پاسخ به: تاریخ میلادی به شمسی  

Khyli mamnoon az inke komakam kardin chon mikhastam ye taghvim benvisam ba VB amma nemidoonestam chetory tabdil konam rasti age mayel boodi be WEB man ham ye sari bezan inam Adresesh :
www.zeus.blogfa.com
۱۰ مرداد ۱۳۸۵ - 9:44 صبح | M - Hacker

# پاسخ به: تاریخ میلادی به شمسی  

Man in algoritmiro ke dadi ba vb neveshtam vase sale 2006 doros dar miyad amma nemidoonam chera vase sal haye ghab az oon ke mizanam eshtebah mishe !!!! age mishe komakam kon Mer30
۱۱ مرداد ۱۳۸۵ - 2:51 صبح | M - Hacker

# پاسخ به: تاریخ میلادی به شمسی  

اگر می شود سورس برنامه دلفی برای تاریخ میلادی به شمسی برایم بفرستید
با تشکر
۲۰ مرداد ۱۳۸۵ - 4:48 عصر | علی

# پاسخ به: تاریخ میلادی به شمسی  

سلام
چه فرقي بين سي پلاس پلاس با سي شارپ داره كدوم قوي تره و اينكه سي شارپ شكل ظاهري اون شبيه كدوم زبانه
۱۹ مهر ۱۳۸۵ - 1:47 صبح | احمد

#  تاریخ میلادی به شمسی  

سلام. دستت درد نکنه خیلی به درد خورد. انشا ا... همیشه موفق باشی
۵ آذر ۱۳۸۵ - 1:08 صبح | میلاد

# پاسخ به: تاریخ میلادی به شمسی  

می تونم خواهش کنم به زبان matlab هم پیاده سازی کنید. ممنون میشم
۲۱ آذر ۱۳۸۵ - 10:25 عصر | فرهاد

# پاسخ به: تاریخ میلادی به شمسی  

kash ba asp ham neveshteh bodi aziz
۶ دی ۱۳۸۵ - 5:53 عصر | elham

# پاسخ به: تاریخ میلادی به شمسی  

لطفا تبدیل تاریخ میلادی به شمسی در پریماورا و msp
۱۷ دی ۱۳۸۵ - 1:02 عصر | سمیه

# پاسخ به: تاریخ میلادی به شمسی  

لطفا اگه می شه تابع تبدیل تاریخ میلادی به شمسی توی وی بی دات نت رو به من بدید ممنون می شم.
۲۲ دی ۱۳۸۵ - 12:17 صبح | مهسا صابری

# پاسخ به: تاریخ میلادی به شمسی  

اگه میشه سورس این تابع رو به زبان asp واسم پیدا کنین.
برای پروژم میخوام... اگه پیدا کردی یا نه واسم ایمیل بزنین.
با تشکر.
۸ اسفند ۱۳۸۵ - 8:46 عصر | مهدی

# پاسخ به: تاریخ میلادی به شمسی  

salam where can i found a component for converting date but written with vb.net and thx for all
۷ فروردین ۱۳۸۶ - 9:03 عصر | alireda

# پاسخ به: تاریخ میلادی به شمسی  

با سلام از شما خيلي متشكرم كه ايت برنامه مهم رو در اينجا قرار داديد چون خيلي به من كمك كرد ...
۱۶ فروردین ۱۳۸۶ - 3:30 عصر | مهناز

# پاسخ به: تاریخ میلادی به شمسی  

http://www.persiadevelopers.com/components/persia
۱۶ اردیبهشت ۱۳۸۶ - 9:40 عصر | حامد

# پاسخ به: تاریخ میلادی به شمسی  

سلام
اگه کسی دنبال تاریخ هجری شمسی در MSP 2007 می گرده می تونه به اینجا مراجعه کنه: http://www.edsoftline.com">http://www.edsoftline.com
مبدل تاریخ هجری شمسی برای مایکروسافت پراجکت 2007 که شرکت ادسافت ارائه کرده. خوبیش اینه که با نسخه های قبلی و نسخه سرور پراجکت 2007 مشکل نداره و هم اینکه همکه جای پراکت میشه از تاریه شمسی استفاده کرد و حتی یه تقویم خیلی کاربردی برای وارد کردن تاریح به هجری شمسی داره. اسمه برنامه EDETA است.http://www.edsoftline.com">http://www.edsoftline.com
۱۹ اردیبهشت ۱۳۸۶ - 7:31 صبح | علی کریمی

# پاسخ به: تاریخ میلادی به شمسی  

بابا دمتون گرم.دستتون درد نکنه .خیلی با حال بود.
۱۰ خرداد ۱۳۸۶ - 9:38 عصر | سحر

# پاسخ به: تاریخ میلادی به شمسی  

با تشکر از مطلب بسیار مفید و کارآمدتون.
۱۱ خرداد ۱۳۸۶ - 2:05 عصر | دانیال تقدس

# پاسخ به: تاریخ میلادی به شمسی  

سورس برنامه با sql server را می شود به mail من بفرستید
۲۳ خرداد ۱۳۸۶ - 9:34 صبح | parsa

# پاسخ به: تاریخ میلادی به شمسی  

خیلی خیلی ممنون به خاطر قرار دادن این کد برای دسترسی همه!
۱۳ تیر ۱۳۸۶ - 10:01 صبح | فرزانه

# پاسخ به: تاریخ میلادی به شمسی  

سلام - عاليه . اگه براتون امكان داشته باشه اصلاح شده برنامه تاريخ ميلادي به شمسي رو به E-mail من بفرستيد . من نتونستم اجراش كنم . خطا ميده براي MiladiIsLeap . مرسي
۱۳ تیر ۱۳۸۶ - 3:12 عصر | Omid

# درخواست راهنمایی  

سلام من یک سایت با asp طراحی کردم و در یک مرحله به مشکلی بر خوردم و اون اینکه در آپلود تصاویر به مشکل بر خوردم
اگر امکان راهنمایی برای شما هست خیلی خیلی ممنون هستم از شما
۱۹ شهریور ۱۳۸۶ - 10:23 صبح | حمید

# پاسخ به: تاریخ میلادی به شمسی  

سلام. خسته نباشید. من تازه شروع کردم به کار با( vb.net 2005) . در برنامه ام نیاز به سورس تبدیل تاریخ میلادی به شمسی . لظفاً اگر مقدور بود
طریقه استفاده در برنامه را برایم بفرستید . ممنون
۲۰ آبان ۱۳۸۶ - 9:48 صبح | حسین

# پاسخ به: تاریخ میلادی به شمسی  

واقعا برنامتون ایول داره!!!!دستتون درد نکنه
من میخاستم بدونم میشه این برنامرو به زبان اسمبلی نوشت؟؟؟؟؟؟
اگر نمیشه برنامهای سراغ دارید که اون رو به اسمبلی تبدیل کنه؟اگر دارید آدرس
سایتشو لطف کنید بزارین
آخه من حتما باید برنامهای برای تبدیل تاریخ میلادی به شمسی به زبان اسمبلی بنویسم ولی نمیتونم محبت کنید شما که استادید راهنماییم کنید
۲۷ آبان ۱۳۸۶ - 11:50 صبح | الهام

# پاسخ به: تاریخ میلادی به شمسی  

khob bod
۳ آذر ۱۳۸۶ - 2:03 عصر | bahar

# پاسخ به: تاریخ میلادی به شمسی  

بابا دمت گرم خیلی باحال این مسئله رو تجزیه کردی!!!!!
اگه میتونی و وقتش را داری در مورد قرار دان یک ساعت آنالوگ در روی فرم در زبان ویژوال بیسیک یک تجزیه و تحلیلی داشته باشی خیلی عالی میشه.
ممنون!!!!!!!
۶ آذر ۱۳۸۶ - 11:35 عصر | moh

# پاسخ به: تاریخ میلادی به شمسی  

با تشكر از توضيحات مفيدتان
۱۸ آذر ۱۳۸۶ - 9:22 صبح | ملياني

# پاسخ به: تاریخ میلادی به شمسی  

برنامه تبدیل تاریخ میلادی به شمسی به زبان assembly 8051 به صورت کاملا مختصر ( 1 کیلو بایت ) چند سال پیش نوشته ام موجود است اگه بخواهید تقدیم میکنم.
۲۰ آذر ۱۳۸۶ - 11:24 عصر | MOSTAFA

# پاسخ به: تاریخ میلادی به شمسی  

با تشکر فراوان در موقع اجرا دوتا error می دهد لطفا راهنمایی کنید.
ضمنا اگر برنامه تبدیل شمسی به میلادی بریم ایمیل کنید خیلی ازشما ممنون خواهم بود.
۱۸ دی ۱۳۸۶ - 9:01 عصر | azimzade

# پاسخ به: تاریخ میلادی به شمسی  

لطفا تبدیل برعکس یعنی شمسی به میلادی را هم بگذاریدبا تشکر
۱۹ دی ۱۳۸۶ - 9:03 عصر | ahmad

# پاسخ به: تاریخ میلادی به شمسی  

اقای mostafa اگر لطفا امکان دارد برنامهای رو که به زبان اسمبلیبرای 8051 نوشتید در سایت بزارید
یا اونو برام میل کنید
خواهش میکنم من خیلی بهش احتیاج دارم
۲۶ دی ۱۳۸۶ - 2:49 صبح | الهام

# پاسخ به: تاریخ میلادی به شمسی  

برنامه تبدیل تاریخ میلادی به شمسی به زبان اسمبلی 8051را در سایت iranled با توضیحات کامل گذاشته ام(کلا حدود 850 بایت برنامه).
همین برنامه به زبان اسمبلی avr و codevisionAVR C را طی روزهای آینده بطور کاملآ مختصر و کامل با احتساب سالهای کبیسه را در همان سایت خواهم گذاشت.
۷ بهمن ۱۳۸۶ - 1:46 صبح | Mostaf

# پاسخ به: مصطفی  

آقای مصطفی کار بسیار پسندیده ای انجام دادید اما گویا فراموش کردید لینک مطلب مورد نظر را قرار دهید .
از لینک زیر برای استفاده از مطلب مورد نظر (تبدیل تاریخ به زبان اسمبلی
)می توانید استفاده کنید:
http://www.iranled.com/article86.html
۷ بهمن ۱۳۸۶ - 2:40 عصر | فاطمه طاهریان

# پاسخ به: تاریخ میلادی به شمسی  

ضمن تشکر از پاسخ تان و یاداوری لینک مطلب مورد نظر که بنده فراموش کرده بودم.
از اینکه این سایت را راه اندازی نموده اید تشکر میکنم.بنده قبلا می خواستم مطلب را در سایت شما نیزارائه دهم (بنا به درخواست آن توسط یکی از کاربران)که نمیدانم چه شد که نشد . در هر صورت بمحض آماده کردن همین مطلب به زبان اسمبلی AVR و C (که بسیار ساده لیکن جامع و در حدود 13-14 خط نوشته ام اما یک اشکال کوچک دارد) آن را در سایت شما ارائه خواهم نمود بد نیست به منطق تبدیل تاریخ میلادی به شمسی ما هم نظری بیفکنید.
۸ بهمن ۱۳۸۶ - 11:38 عصر | Mostaf

# پاسخ به: مصطفی  

آقای مصطفی بسیار خوشحال خواهم شد از مطالب مفید شما نیز بهرمند شوم.
موفق باشید
۹ بهمن ۱۳۸۶ - 10:34 صبح | فاطمه طاهریان

# پاسخ به: تاریخ میلادی به شمسی  

سلام من 1 سوال داشتم ميخواستم بدونم فرق بين زبان سي سي پلاس پلاس و سي شارپ چه است خيلي ممنون ميشم اگ بطور كامل توضيح بدهيد
۱۷ بهمن ۱۳۸۶ - 11:12 صبح | فرخ

# پاسخ به: تاریخ میلادی به شمسی  

سلام.
با عرض معذرت از اینکه بدلیل فوت یکی از بستگان وعده ام دیر شد.
این برنامه به زبان (C ( codevision نوشته شده است که برای استفاده در میکرو کنترلرهای سری AVR مناسب است. برای تبدیل تاریخ کافیست در متغیرهای مربوطه(year,month,day) تاریخ میلادی را گذاشته و پس از فراخوان تابع ، تاریخ شمسی را در همان مکانها بخوانید.
ممنون خواهم شد اشکالات احتمالی برنامه را یاداوری نمایید.


;{flash unsigned char mon[]={0,10,11,9,11,10,10,9,9,9,8,9,9
;unsigned char year,month,day
//////////////////For Example :2008/02/08 --->1386/11/19
year=8;
month=2;
day=8;
////////////////////////
if(year%4==0 & month>2)day++; //miladi leap year: increase day

if(year%4==1 && month==3 && day==20){day=30;month=12;goto yearcal;} // shamsi leap year
if(year%4==1 && (month<3 || (month==3 && day<20)))day++; // miladi leap year remain: increase day


day=day+mon[month]; //calculate shmsi day

month=month+9; //calculate shamsi month
if (month>12)month=month-12; //adjust month
if(month<7){if(day>31){day=day-31;month++;}} //adjust shamsi day with related month
if(month<12){if(day>30){day=day-30;month++;}}
if(month==12){if(day>29){day=day-29;month=1;}}
yearcal:
year=year+79; //calculate shamsi year
if(year >= 100)year=year-100;

if(year%4==3){if(month>10 || (month==10 && day>11 )) year--;} //adjust shmasi year
else {if(month>10 || (month==10 && day>10 )) year--;}
۱۹ بهمن ۱۳۸۶ - 11:25 عصر | Mostaf

# پاسخ به: تاریخ میلادی به شمسی  

برنامه با جابجائی حروف در صفحه ظاهر شده است و ظاهرأ امکان EDIT آن وجود ندارد.چرا؟
امید وارم این یکی بدون اشکال خوانده شود.


// ;{flash unsigned char mon[]={0,10,11,9,11,10,10,9,9,9,8,9,9
// ;unsigned char year,month,day
//////////////////For Example :2008/02/08 --->1386/11/19 ////
// ;year=8
// ;month=2
// ;day=8
////////////////////////
// if(year%4==0 & month>2)day++; //miladi leap year: increase day

if(year%4==1 && month==3 && day==20){day=30;month=12;goto yearcal;} // shamsi leap year
if(year%4==1 && (month<3 || (month==3 && day<20)))day++; // miladi leap year remain: increase day


day=day+mon[month]; //calculate shmsi day

month=month+9; //calculate shamsi month
if (month>12)month=month-12; //adjust month
if(month<7){if(day>31){day=day-31;month++;}} //adjust shamsi day with related month
// ;{{;++if(month<12){if(day>30){day=day-30;month
// ;{{if(month==12){if(day>29){day=day-29;month=1
// :yearcal
// year=year+79; //calculate shamsi year
// ;if(year >= 100)year=year-100

// ;{if(year%4==3){if(month>10 || (month==10 && day>11 )) year-- //adjust shmasi year
// ;{;--else {if(month>10 || (month==10 && day>10 )) year
۲۰ بهمن ۱۳۸۶ - 12:02 صبح | Mostaf

# پاسخ به: تاریخ میلادی به شمسی  

سلام وب خوبي داري خوشحال ميشم به وبهاي منم بيايي؟
ممنون؟
www.mojtabagholampoor.blogfa.com
www.mojtabagholampoor.parsiblog.com
www.mylove-iranian.blogfa.com
www.ya-hidar.blogfa.com
__________________________________________
هر گاه دانستي زياد داني بدان كه ناداني
۱۶ فروردین ۱۳۸۷ - 1:43 صبح | مجتبي غلامپور پسر ايروني و جون آريايي

# پاسخ به: تاریخ میلادی به شمسی  

ممنون دستتون درد نکنه، من تابع شما رو با دلفی کد کردم،باید بگم برای تبدیل تاریخ میلادی به شمسی کامپوننت ها و DLL های تو اینترنت میشه گیر آورد،ولی همه شون مشکل داشتن،حسن تابع شما به اینه که حداقل از1998 تا2028 رو درست تبدیل میکنه

بازم ممنون
۳ اردیبهشت ۱۳۸۷ - 3:50 صبح | احسان

# پاسخ به: تاریخ میلادی به شمسی  

سلام محترم
شما میتوانید برای ما ماه 02 تاریخ 27 سال 1371 رابه میلادی تبدیل کنید اگر تکلیف نشود برای ما یک فارمول کوچک سال هجری را به میلادی تبدیلی را ارسال کنید

با احترام

وصال نوابی کابل افغانستان
۱۹ اردیبهشت ۱۳۸۷ - 3:06 عصر | تبدیلی سال هجری به میلادی وبر عکس ان

# پاسخ به: تاریخ میلادی به شمسی  

با سلام این کد در ای اس پی کلاسیک ( ASP ) جواب میده تقدیم می کنم به دوستان :

<%
response.Write(gregorian_to_jalali("2008", "5", "21") & "<hr>")
response.Write(jalali_to_gregorian("1387", "3", "1") & "<hr>")

function div(a,b)
div = fix(a / b)
end function

function gregorian_to_jalali(g_y, g_m, g_d)
g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29)
gy = g_y-1600
gm = g_m-1
gd = g_d-1

g_day_no = 365*gy+div(gy+3,4)-div(gy+99,100)+div(gy+399,400)

i=0
While (i<gm)
g_day_no = g_day_no + g_days_in_month(i)
i= i+1
Wend
if (gm>1 and ((gy mod 4 =0 and gy mod 100 <> 0) or (gy mod 400 = 0))) then
'leap and after Feb
g_day_no = g_day_no + 1
end if
g_day_no = g_day_no + gd

j_day_no = g_day_no-79

j_np = div(j_day_no, 12053)' 12053 = 365*33 + 32/4
j_day_no = j_day_no mod 12053

jy = 979+33*j_np+4*div(j_day_no,1461)' 1461 = 365*4 + 4/4

j_day_no = j_day_no mod 1461

if (j_day_no >= 366) then
jy = jy + div(j_day_no-1, 365)
j_day_no = (j_day_no-1) mod 365
end if

i=0
While (i<11 and j_day_no >= j_days_in_month(i))
j_day_no = j_day_no - j_days_in_month(i)
i= i+1
Wend

jm = i+1
jd = j_day_no+1
if len(jm) < 2 then
jm = "0" & jm
end if
if len(jd) < 2 then
jd = "0" & jd
end if

gregorian_to_jalali = jy & "/" & jm & "/" & jd
end function

function jalali_to_gregorian(j_y, j_m, j_d)
g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29)

jy = j_y-979
jm = j_m-1
jd = j_d-1

j_day_no = 365*jy + div(jy, 33)*8 + div(jy mod 33+3, 4)

i=0
While (i<jm)
j_day_no = j_day_no + j_days_in_month(i)
i= i+1
Wend

j_day_no = j_day_no + jd

g_day_no = j_day_no+79

gy = 1600 + 400*div(g_day_no, 146097) ' 146097 = 365*400 + 400/4 - 400/100 + 400/400
g_day_no = g_day_no mod 146097

leap = true
if (g_day_no >= 36525) then'36525 = 365*100 + 100/4
g_day_no = g_day_no - 1
gy = gy + 100*div(g_day_no, 36524)' 36524 = 365*100 + 100/4 - 100/100
g_day_no = g_day_no mod 36524
if (g_day_no >= 365) then
g_day_no = g_day_no + 1
else
leap = false
end if
end if

gy = gy + 4*div(g_day_no, 1461)'1461 = 365*4 + 4/4
g_day_no = g_day_no mod 1461

if (g_day_no >= 366) then
leap = false
g_day_no = g_day_no - 1
gy = gy + div(g_day_no, 365)
g_day_no = g_day_no mod 365
end if

i=0
addnumber = 0
While (g_day_no >= (g_days_in_month(i) + addnumber))
if (i = 1 and leap) then
addnumber = 1
else
addnumber = 0
end if
g_day_no = g_day_no - (g_days_in_month(i) + addnumber)
i= i+1
Wend


gm = i+1
gd = g_day_no+1
if len(gm) < 2 then
gm = "0" & gm
end if
if len(gd) < 2 then
gd = "0" & gd
end if
jalali_to_gregorian = gy & "/" & gm & "/" & gd
end function


%>
۱ خرداد ۱۳۸۷ - 4:29 عصر | احمد ربیعی

# پاسخ به: تاریخ میلادی به شمسی  

man dar tarikh 24 bahman 1345 be donya amadeam lotfan sal miladi man raelam farmaeid batashakor
۱۰ خرداد ۱۳۸۷ - 11:33 صبح | shahram

# پاسخ به: تاریخ میلادی به شمسی  

با سلام خدمت همه دوستان
فرمول زیر در msp جهت شمسی کردن تارخ به کار می رود ، اما متأسفانه تنها مشکلش این است که سال کبیسه را درست حساب نمی کند
مثلأ 20ماس 2009 را به جای نمایش 30 اسفند ، یکم فروردین 88 نمایش می دهد
آیا کسی می تواند راهنمایی نماید متشکرم


(Int((Int([Start]-DateValue("21/3/1997 00:00:00"))-Int(Int([Start]-DateValue("21/3/1997 00:00:00"))/1461))/365)+76) & "/" & (IIf(((((Int([Start]-DateValue("21/3/1997 00:00:00")))-Int((Int([Start]-DateValue("21/3/1997 00:00:00")))/1461)) Mod 365))<=186,Int(((((Int([Start]-DateValue("21/3/1997 00:00:00")))-Int((Int([Start]-DateValue("21/3/1997 00:00:00")))/1461)) Mod 365))/31)+1,Int((((((Int([Start]-DateValue("21/3/1997 00:00:00")))-Int((Int([Start]-DateValue("21/3/1997 00:00:00")))/1461)) Mod 365))-186)/30)+7)) & "/" & (IIf(((((Int([Start]-DateValue("21/3/1997 00:00:00")))-Int((Int([Start]-DateValue("21/3/1997 00:00:00")))/1461)) Mod 365))<=186,Int(((((Int([Start]-DateValue("21/3/1997 00:00:00")))-Int((Int([Start]-DateValue("21/3/1997 00:00:00")))/1461)) Mod 365)) Mod 31)+1,Int((((((Int([Start]-DateValue("21/3/1997 00:00:00")))-Int((Int([Start]-DateValue("21/3/1997 00:00:00")))/1461)) Mod 365))-186) Mod 30)+1+(IIf((Int([Start]-DateValue("21/3/1997 00:00:00"))) Mod 1461=0,1,0))))
۱۲ تیر ۱۳۸۷ - 7:57 صبح | مهدی

# پاسخ به: تاریخ میلادی به شمسی  

www.kook7.com
۱۵ مرداد ۱۳۸۷ - 12:06 عصر | taghi

# پاسخ به: تاریخ میلادی به شمسی  

با سلام
من زیاد از c سر در نمی ارم
میشه یکی بگه چهجوری میتونم از الگوریتم بالا استفاده کنم؟؟؟؟؟؟؟؟؟؟
۱۷ مرداد ۱۳۸۷ - 11:19 عصر | مهدی

# پاسخ به: تاریخ میلادی به شمسی  

خيلي جالب بود.ميشه اين برنامه رو به sql هم تبديل كرد؟
۶ شهریور ۱۳۸۷ - 9:30 صبح | آزاده

# پاسخ به: تاریخ میلادی به شمسی  

سلام
چطور می تونم توی #C آیکن کامپوننت ساخته شده رو عوض کنم.
۱۰ شهریور ۱۳۸۷ - 12:07 عصر | nasrin

# پاسخ به: تاریخ میلادی به شمسی  

کمک :
کسی می دونه توی #C وقتی کامپوننت می نويسيم چطور می تونیم آيکن کامپوننت را عوض کنيم
۱۰ شهریور ۱۳۸۷ - 12:08 عصر | نسرین پورنجاتی

# پاسخ به: تاریخ میلادی به شمسی  

TABDILE TARIKHE SHAMCI BE MILADI
۱۹ آبان ۱۳۸۷ - 2:38 عصر | HOSEEIN GHYANDI

# پاسخ به:   

اگه میشه الگوریتم تبدیل تاریخ میلادی به شمسی را برایم ایمیل کنید ممنون میشم
larma380@yahoo.com
۲۱ آبان ۱۳۸۷ - 10:44 صبح | سلیمان

# پاسخ به: تاریخ میلادی به شمسی  

اگه میشه الگوریتم تبدیل تاریخ میلادی به شمسی را برایم ایمیل کنید ممنون میشم
larma380@yahoo.com
۲۱ آبان ۱۳۸۷ - 10:52 صبح | سلیمان

# پاسخ به: تاریخ میلادی به شمسی  

با سلام وقتتون بخیر
ازاینکه این کد رو در سایت خودتون قرار دادین ، بسیار سپاسگذارم . با اجازه شما برنامه رو در C#.net و البته با توجه به برنامه یکی از دوستان با انجام تغییراتی در جهت سهولت فهم وکاربرد ، در وبلاگ خودم با ذکر منبع گذاشتم .
پایدار و پیروز باشید
http://science-sharing.blogfa.com

۵ آذر ۱۳۸۷ - 12:27 صبح | ladylo0ve

# پاسخ به: تاریخ میلادی به شمسی  

be zaban PHP man har 2 tabdil ra neveshtam ve az rahnomai ha tashakkr
aziz jan ta 10 milyon sal
dar in safeh
http://www.shamswin.net
http://www.sms118.net
http://www.smsir.net
http://www.shamslin.net
best regard pakrou
۱۲ آذر ۱۳۸۷ - 2:09 صبح | samad

# پاسخ به: تاریخ میلادی به شمسی veشمسی به: تاریخ میلادی  

be zaban PHP man har 2 tabdil ra neveshtam ve az rahnomai ha tashakkr
aziz jan ta 10 milyon sal
dar in safeh
http://www.shamswin.net
http://www.sms118.net
http://www.smsir.net
http://www.shamslin.net
best regard pakrou
۱۲ آذر ۱۳۸۷ -
۱۲ آذر ۱۳۸۷ - 2:10 صبح | samad

# پاسخ به: تاریخ میلادی به شمسی  

كد ارائه شده ايراد داره و نحوه محاسبه سال كبيسه كامل نيست
مثلاً تاريخ 21/12/1948 با اين فرمول اشتباه از آب در ميآد
موفق باشيد
۱ دی ۱۳۸۷ - 12:15 صبح | محفوظ

# پاسخ به: تاریخ میلادی به شمسی  

سلام،
من با الگوریتمتان موافق نیستم، چون شما کبیسه بودن سال شمسی را در نظر نمی گیرید!

در ضمن خیلی استفاده از بلاگتون راحتتر می شد اگه comment های متفرقه و نامربوط را پاک می کردید.
۵ دی ۱۳۸۷ - 3:56 صبح | مهرداد

# پاسخ به: تاریخ میلادی به شمسی  

ba salam va arze khaste nabashid agar ye lotfi konid va barname tarikhe shamsi be miladi va bar axs ra be zaban c++ neveshte mamnon misham azaton albate man khodam neveshtam vali nemidonam kojaye barname eshkal dare age lotf konid mamnoneton misham
۵ دی ۱۳۸۷ - 10:15 صبح | saeed

# پاسخ به: تاریخ میلادی به شمسی  

با سلام و خسته نباشید
خیلی خیلی باحالی
دست درست
اگره می شه به زبان asp در سایت رو کدشو به ایمیلم بفرستی
۹ دی ۱۳۸۷ - 2:51 عصر | ahmad

# پاسخ به: تاریخ میلادی به شمسی  

tanha siti ke kabice har dorst hesab kardeh ta 10 ,000 sal ham shamsi be miladi va ham miladi be shamsi dorost mohasebe mikonad site shamswin.net ast
۱۸ دی ۱۳۸۷ - 1:11 صبح | helena

# پاسخ به: تاریخ میلادی به شمسی  

برای کار با تاریخ های شمسی میلادی و قمری در محیط های برنامه نویسی سری به این سایت بزنید
www.nano3oft.com
۲۷ فروردین ۱۳۸۸ - 12:05 عصر | علی

# پاسخ به: تاریخ میلادی به شمسی  

سلام.27/5/1980 برابر چه تاریخ شمسی است.ممنون جواب رابه ایمیلم بفرستید.
۱۲ تیر ۱۳۸۸ - 12:42 عصر | مونا

# پاسخ به: تاریخ میلادی به شمسی  

16/12/1376 shamsi be miladi
۱۷ تیر ۱۳۸۸ - 12:05 صبح | dilan

# پاسخ به: تاریخ میلادی به شمسی (کد دلفی)  


سلام ، خيلي ممنون از مطلبت؛ من خيلي دنبال فرمول تبديل تاريخ ميلادي به شمسي بودم خيلي به کارم اومد و همين دستورات رو به دلفي تبديل کردم برا دوستاني که نياز دارند . اگه ايرادي چيزي داره به بزرگي خودتون ببخشيد و بهم ايميل بزنيد
ايميل : arkiaaa@yahoo.com
لينک دانلود: http://arkia.persiangig.com/m2sh.zip
====================================================================
function kabiseh(year:integer):Boolean;
begin

if ( ((year mod 100) <> 0 ) and ((year mod 4) = 0 ) ) or ( ((year mod 100 )=0) and ((year mod 400)=0) )then
kabiseh:=true
else
kabiseh:=false;

end;

function m2sh(miladidate:string):string;
var myear,shyear,mmonth,shmonth,mday,shday:integer;
shyear_str,shmonth_str,shday_str:string;
daycount,deydiff,farvardindiff:integer;
days:array[0..12] of integer;
days_kabiseh:array[0..12] of integer;
begin

days[0]:=0;
days[1]:=31;
days[2]:=59;
days[3]:=90;
days[4]:=120;
days[5]:=151;
days[6]:=181;
days[7]:=212;
days[8]:=243;
days[9]:=273;
days[10]:=304;
days[11]:=334;

days_kabiseh[0]:=0;
days_kabiseh[1]:=31;
days_kabiseh[2]:=60;
days_kabiseh[3]:=91;
days_kabiseh[4]:=121;
days_kabiseh[5]:=152;
days_kabiseh[6]:=182;
days_kabiseh[7]:=213;
days_kabiseh[8]:=244;
days_kabiseh[9]:=274;
days_kabiseh[10]:=305;
days_kabiseh[11]:=335;


myear:=StrToInt(miladidate[1]+miladidate[2]+miladidate[3]+miladidate[4]);
mmonth:=StrToInt(miladidate[6]+miladidate[7]);
mday:=StrToInt(miladidate[9]+miladidate[10]);

farvardindiff:=79;

if kabiseh(myear) then daycount:=days[mmonth-1]+mday else daycount:=days_kabiseh[mmonth-1]+mday;

if kabiseh(myear-1) then deydiff:=11 else deydiff:=10;

if daycount > farvardindiff then
begin

daycount:=daycount-farvardindiff;
if daycount<= 186 then
begin
if daycount mod 31 = 0 then
begin
shmonth:=daycount div 31;
shday:=31;
end
else
begin
shmonth:=(daycount div 31)+1;
shday:=daycount mod 31;
end;
shyear:=myear-621;
end
else
begin
daycount:=daycount-186;
if daycount mod 31 = 0 then
begin
shmonth:=daycount div 30+6;
shday:=30;
end
else
begin
shmonth:=(daycount div 30)+7;
shday:=daycount mod 30;
end;
shyear:=myear - 621;
end;
end
else
begin
daycount:=daycount+deydiff;
if daycount mod 30 = 0 then
begin
shmonth:=daycount div 30+9;
shday:=30;
end
else
begin
shmonth:=(daycount div 30)+10;
shday:=daycount mod 30;
end;
shyear:=myear - 622;


end;

str(shyear,shyear_str);
str(shmonth,shmonth_str);
str(shday,shday_str);

if Length(shmonth_str) < 2 then shmonth_str:='0' + shmonth_str;
if Length(shday_str) < 2 then shday_str:='0' + shday_str ;

m2sh:=shyear_str+'/'+shmonth_str+'/'+shday_str;

end;


====================================================================

مثال :
procedure TForm1.Button1Click(Sender: TObject);
begin

ShowMessage( m2sh(DateToStr(date)));

end;

۲۳ تیر ۱۳۸۸ - 4:16 عصر | ارکیا

# پاسخ به: تاریخ میلادی به شمسی  

slam faghad be man begid 1383/07/23 be mialladi chi mishe lotfan
۱ شهریور ۱۳۸۸ - 6:05 عصر | manizhe

# پاسخ به: تاریخ میلادی به شمسی  

اين هم كد MATLAB :

function [yj,mj,dj]=m_milady2shamsi(y,m,d)

% [yj,mj,dj]=m_milady2shamsi(2009,8,27)
%
% yj =
%
% 1388
%
%
% mj =
%
% 6
%
%
% dj =
%
% 5
%



r_y=fix(datenum(y,m,d) -datenum(y,1,1));

if r_y>=79 %=30-11+30+30

yj=y-621;
dd=r_y-79+1;


if dd<=6*31
if rem(dd,31)==0
mj=dd/31;
dj=31;
else
mj=fix(dd / 31)+1;
dj=rem(dd,31);
end


else
dd=dd-186;
if rem(dd,30)==0
mj=dd/30+6;
dj=30;
else
mj=fix(dd / 30)+7;
dj=rem(dd,30);
end
end

else

yj=y-622;
if rem(yj,4)~=3
dd=r_y+11;
else
dd=r_y+12;
end

if rem(dd,30)==0
mj=dd/30+9;
dj=30;
else
mj=fix(dd / 30)+10;
dj=rem(dd,30);
end

end
۵ شهریور ۱۳۸۸ - 3:16 عصر | مرتضي احمدي

# پاسخ به: تاریخ میلادی به شمسی  

"زكات العلم نشره"
با سلام
ضمن تشكر از اعتماد به نفس نسبت به دانش خود، قرار دادن مطلب هر چند هم ناقص باشد به همه كمك ميكند.و در جهت تكميل دانش عمومي است.

موفق باشيد
۸ شهریور ۱۳۸۸ - 1:19 عصر | حسين نيا

# پاسخ به: تاریخ میلادی به شمسی  

17 ابان 1379 چندم ماه رمضان ان سال بود؟
۱۲ شهریور ۱۳۸۸ - 2:58 عصر | میترا

# پاسخ به: تاریخ میلادی به شمسی  

با سلام و خسته نباشيد
بابت اين سورس برنامه خيلي ممنون
يه سوال داشتم چگونه ميتوان با شما در تماس بود من الان خارج از ايران هستم
با تشكر
داني
۱۰ مهر ۱۳۸۸ - 2:24 صبح | dani

# پاسخ به: تاریخ میلادی به شمسی  

khaste nabashiiiiiid
mishe tabdile tarikhe shamsii be miladii dar zabane c++ ro ham bezariiiid mamnoon misham
۲۹ آبان ۱۳۸۸ - 11:01 عصر | shiva

# پاسخ به: تاریخ میلادی به شمسی  

لطفا تاریخ میلادی به شمسی در vb.net 2008‌ هم قرار دهيد
ممنون
۳۰ آبان ۱۳۸۸ - 8:17 عصر | shavi

# پاسخ به: تاریخ میلادی به شمسی  

لطفا" اگر میشود با javascript هم کد تبدیل تاریخ میلادی به شمسی را بگذارید
۶ آذر ۱۳۸۸ - 7:12 عصر | پریسا

# پاسخ به: تاریخ میلادی به شمسی  

اگه میشه برنامه را به ویژوال بدید متچکرم
۲۲ آذر ۱۳۸۸ - 8:17 عصر | رضا محمد پور بهبید

# پاسخ به: تاریخ میلادی به شمسی  

سلام
ممنونم دستت درد نكنه
كلي كمكم كرد اين الگوريتم
۲۶ آذر ۱۳۸۸ - 9:19 عصر | arash

# پاسخ به: تاریخ میلادی به شمسی  

salam man mikhaham tarikhe sale khodam ra az miladi be shamsi bebinam chand mishe
lotfan age mishe javabe man ra alan be man bedahid
tarikhe man hast 22. 10 .1994
۲۹ آذر ۱۳۸۸ - 2:52 عصر | mojtaba noori

# پاسخ به: تاریخ میلادی به شمسی22. 10 .1994  

salam man mikhaham tarikhe sale khodam ra az miladi be shamsi bebinam chand mishe
lotfan age mishe javabe man ra alan be man bedahid
tarikhe man hast 22. 10 .1994
۲۹ آذر ۱۳۸۸ - 2:54 عصر | mojtaba noori

# تبدیل  

همینطور که می دونید فرم ها و کدهای سی شارپ که با دات نت 2008 نوشته شده باشه در دات نت 2005 اجرا نمی شن، چطور می تونم اینکارو بکنم؟
۱ دی ۱۳۸۸ - 4:01 عصر | رضا

# پاسخ به: تاریخ میلادی به شمسی  

اگر بخواهیم که روز های تعطیل رو هم تقویم نشون بده باید چه کنیم؟
۸ دی ۱۳۸۸ - 10:56 صبح | mariyam

# پاسخ به: تاریخ میلادی به شمسی  

با سلام اگر می شود به من در نوشتن فرمول تبدیل تاریخ میلادی به شمسی کمک کنید مرسی
۱۰ دی ۱۳۸۸ - 2:03 عصر | sara

# پاسخ به: تاریخ میلادی به شمسی  

اگر می شود فرمول را به زبانvb.net برای من بفرستید
۱۰ دی ۱۳۸۸ - 2:09 عصر | sara

# پاسخ به: تاریخ میلادی به شمسی  

در زبانهای دات نت (حال vb یا Cشارپ) متوان از کلاسهای موجود در namespace زیر استفاده کرد:
using System.Globalization
//
حال میتوان از کلاس persianCalander استفاده کرد:
PersianCalander pc=new PersianCalander
pc.ToDateTime(1388,1,1);
۱۱ دی ۱۳۸۸ - 12:21 عصر | م.ق

# پاسخ به: تاریخ میلادی به شمسی  

سلام
داش فرمول ها رو چه جوری وارد کنیم چند تا لیبل بذاریم چند تا دکمه بزاریم؟
با تشکر
۱۴ دی ۱۳۸۸ - 10:07 عصر | Nnnnn

# پاسخ به: تاریخ میلادی به شمسی  

سلام
چطور میتونم تاریخ میلادی به شمسی رو با کد php بنویسم؟
۱۶ دی ۱۳۸۸ - 8:10 عصر | mehdi

# پاسخ به: تاریخ میلادی به شمسی  

مرسی خیلی به دردم خورد
۹ بهمن ۱۳۸۸ - 10:41 عصر | سپیده

# پاسخ به: تاریخ میلادی به شمسی  

سلام

من براي يك دستگاه كه تقويمش ميلادي است و مي خواهيم شمسي شود بايد سورس برنامه تبديل تقويم ميلادي به شمسي را به زبان c به شركت آلماني بفرستم. مي خواهم بدونم شما سورس اين برنامه را داريد كه درست وصحيح و بدون اشكال هم بشه چون دقت تارخ براي اين دستگاه خيلي مهم است از طرفي نمي خوام برنامه مشكل دار را به طرف خارجي بفرستم.
ممنون مي شم در صورت اطمينان و تاييد خودتان برنامه را به صورت pdf به من ايمل كنيد.

با تشكر فراوان
۱۹ اسفند ۱۳۸۸ - 2:12 صبح | امير

# پاسخ به: تاریخ میلادی به شمسی  

salam:
khahesh mikonam in tarikhe miladi ra be shamsi tabdil konid,mamnoonam
26/01/2010
۲ فروردین ۱۳۸۹ - 3:04 عصر | emilin

# پاسخ به: تاریخ میلادی به شمسی  

سلام
من به کد SQL تبدیل سال میلادی به شمسی و برعکس نیاز دارم اما تمام کدهایی که تا حالا دیدم سالهای کبیسه رو درست محاسبه نمیکنن کسی هست که یک کد کامل رو داشته باشه که ساهای کبیه رو هم صحیح محاسبه کنه مخصوصا تو تبدیل میلادی به شمسی تاریخهای 30 اسفند 87 اشتباه محاسبه میشن ممنون میشم
۴ فروردین ۱۳۸۹ - 12:53 عصر | کمانکش

# پاسخ به: تاریخ میلادی به شمسی  

بسم الله الرحمن الرحیم

الگوریتم تبدیل تاریخ میلادی به شمسی

این الگوریتم قادر به تبدیل تاریخ های بین 2000 تا 2062 میلادی به معادل شمسی آن می باشد .
در این الگوریتم تمام جزئیات مر بوط به سال های کبیسه میلادی و شمسی برای سال های بین 2000 تا 2062 میلادی در نظر گرفته شده است . بنابراین خروجی برنامه دقیق خواهد بود .

تعریف متغیرها :
Year_miladi , Month_miladi , Day_miladi سه متغیر ورودی از نوع صحیح (Integer) می باشند که باید تاریخ میلادی ای را که می خواهیم معادل شمسی آن را بدست آوریم ، در این متغیر ها قرار دهیم .
Year_shamsi , Month_shamsi , Day_shamsi سه متغیر خروجی از نوع صحیح (Integer) می باشند که پس از اجرای برنامه تاریخ شمسی معادل را بازمی گردانند .
x و y و z متغیرهایی از نوع صحیح (Integer) می باشند که در مراحل مختلف از آنها استفاده می شود .

شروع :

1- قبل از هر چیز باید مشخص کنید که سال میلادی ورودی (که دو رقم آخر آن در متغیر Year_miladi ذخیره شده است) کبیسه است یا غیر کبیسه ؟
برای این کار کافیست بررسی کنیم که باقیمانده تقسیم Year_miladi بر 4 برابر صفر است یا خیر ؛ در صورتی که این باقیمانده صفر باشد سال میلادی یک سال کبیسه است و در غیر این صورت یک سال غیر کبیسه است .
( این قانون برای سال های بین 2000 تا 2100 بر قرار است که بازه برنامه ما یعنی 2000 تا 2062 را نیز شامل می شود .) برای مثال سال 2008 یک سال میلادی کبیسه است . چون باقیمانده تقسیم دو رقم آخر آن (08) بر 4 برابر صفر می باشد .

2- پس از تعیین کبیسه بودن یا نبودن سال میلادی ورودی ، با ید تعداد روز هایی را که از ابتدای سال میلادی گذشته است را محاسبه کرد .

برای این کار از جدول زیر که تعداد روزهای هر یک از ماه های میلادی را مشخص می کند استفاده می کنیم :

January 31 days
February 28 days (29 days for leap years)
March 31 days
April 30 days
May 31 days
June 30 days
July 31 days
August 31 days
September 31 days
October 31 days
November 31 days
December 31 days

باید توجه داشت که ماه دوم میلادی برای سالهای عادی 28 روزه می باشد و برای سال های کبیسه میلادی 29 روز ه است .
با یک مثال این کار تشریح می گردد :
فرض کنید می خواهیم بدانیم برای تاریخ August 25 , 2008 چند روز از ابتدای سال میلادی 2008 گذشته است :
Y=31(January)+29(February)+31(March)+30(April)+31(May)+30(June)+31(July)+25(days)=238

توجه داشته باشید که به دلیل کبیسه بودن سال 2008 میلادی (رجوع شود به بخش 1 ) ماه February را 29 روزه محاسبه کردیم . همچنین توجه داشته باشید که آخرین عدد جمع شده برابر روز میلادی وارد شده در متغیر Day_miladi (یعنی 25) می باشد .

3- در این مر حله مشخص می کنیم که x برابر 78 است یا 79 . (از x بعدا برای محاسبات استفاده خواهد شد ) .
اگر Year_miladi کوچکتر یا مساوی 28 باشد آنگاه قراردهید x=79 و در غیر اینصورت قرار دهید x=78 .

4- اگر تعداد روز های سپری شده از ابتدای سال میلادی که در مرحله 2 آن را محاسبه کردیم (Y)، از x بزرگتر بود برو به مرحله 1_4 و در غیر اینصورت (یعنی در صورتی که کوچکتر یا مساوی Y بود) برو به مرحله 2_4 .
------------------------------------------------------------------------------------------------------------
1_4 : Y-X را محاسبه کن و جواب را در Y ذخیره کن .
اگر Y کوچکتر مساوی 186 است برو به Less_than_186 و در غیر اینصورت برو به Greater_than_186 .

Less_than_186 : Y را بر 31 تقسیم کن . اگر باقیمانده صفر شد خارج قسمت را در Month_shamsi ذخیره کن و قرار بده Day_shamsi=31 . اما اگر باقیمانده غیر صفر شد ، خارج قسمت بعلاوه یک را در Month_shamsi و باقیمانده را در Day_shamsi ذخیره کن .
برو به calculate_year_shamsi .


Greater_than_186 :
Y-186 را محاسبه کن و جواب را در Y ذخیره کن .
Y را بر 30 تقسیم کن . اگر باقیمانده این تقسیم صفر شد خارج قسمت بعلاوه 6 را در Month_shamsi ذخیره کن و قرار بده Day_shamsi=30 . اما اگر باقیمانده غیر صفر شد ، خارج قسمت بعلاوه هفت را در Month_shamsi و باقیمانده را در Day_shamsi ذخیره کن .
برو به calculate_year_shamsi .

calculate_year_shamsi :
Year_miladi بعلاوه 79 رامحاسبه کن و جواب را در Year_shamsi ذخیره کن .
اگر Year_shamsi بزرگترمساوی 100 بود آنگاه Year_shamsi-100 را در Year_shamsi ذخیره کن .

پایان . (اکنون تاریخ شمسی معادل در متغیر های Year_shamsi , Month_shamsi , Day_shamsi قرار دارد .توجه کنید که Year
۱۵ فروردین ۱۳۸۹ - 4:31 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

ادامه
پایان . (اکنون تاریخ شمسی معادل در متغیر های Year_shamsi , Month_shamsi , Day_shamsi قرار دارد .توجه کنید که Year_shamsi دو رقم آخر سال شمسی را نمایش می دهد .)
------------------------------------------------------------------------------------------------------------
2_4 :ا گر Year_miladi کوچکتر یا مساوی 28 باشد آنگاه برو به Less_than28_or equal_28 و در غیر این صورت برو به Greater_than_28 .

Less_than28_or equal_28 :
Year_miladi را بر4 تقسیم کن؛ اگر باقیمانده برابر یک بود آنگاه قرار بده Z=11 و در غیر اینصورت قرار بده Z=10 .
برو به Continue .


Greater_than_28 :
Year_miladi را بر4 تقسیم کن؛ اگر باقیمانده یکی از اعداد 1 یا 2 بود آنگاه قرار بده Z=11 و در غیر اینصورت (یعنی در صورتی که باقیمانده یکی از اعداد 0 یا 3 بود) ، قرار بده Z=10 .
برو به Continue .

Continue : Y+Z را محاسبه کن و حاصل را در Y ذخیره کن .
Y را بر 30 تقسیم کن . اگر باقیمانده این تقسیم صفر شد خارج قسمت بعلاوه 9 را در Month_shamsi ذخیره کن و قرار بده Day_shamsi=30 . اما اگر باقیمانده غیر صفر شد ، خارج قسمت بعلاوه 10 را در Month_shamsi و باقیمانده را در Day_shamsi ذخیره کن .

Year_miladi بعلاوه 78 رامحاسبه کن و جواب را در Year_shamsi ذخیره کن .
اگر Year_shamsi بزرگترمساوی 100 بود آنگاه Year_shamsi-100 را در Year_shamsi ذخیره کن .

پایان . (اکنون تاریخ شمسی معادل در متغیر های Year_shamsi , Month_shamsi , Day_shamsi قرار دارد .توجه کنید که Year_shamsi دو رقم آخر سال شمسی را نمایش می دهد .)

------------------------------------------------------------------------------------------------------------
۱۵ فروردین ۱۳۸۹ - 4:32 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

در این قسمت برنامه نوشته شده به زبان اسمبلی میکروکنترلر های سری PIC18 را نیز برای علاقمندان قرار داده ام :
;*******************************************************************************
; Convert Miladi to Shamsi subroutine
;
; This subroutine convert miladi date to shamsi date . before executing this
; subroutine Year_miladi and Mounth_miladi and Day_miladi should be loaded.
; the result will save in Year_shamsi and Mounth_shamsi and Day_shamsi .
; minimum Year_miladi = 2000 ; maximum Year_miladi = 2062

ASM

Miladi_to_shamsi
;--------------------------------------------;
MOVLB 0X0E ; Select Bank 14 .
MOVF _Year_miladi,W,BANKED ;
ANDLW 0X03 ;
MOVWF _i,ACCESS ; i = Year_miladi mod 4
;--------------------------------------------;
MOVLW 0X01 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 1 ?
BRA L800 ; No,
CLRF _Temp_2,ACCESS ; Yes,
CLRF _Temp_1,ACCESS ;
BRA L811_2 ;
;--------------------------------------------;
L800 MOVLW 0X02 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 2 ?
BRA L801 ; No,
CLRF _Temp_2,ACCESS ; Yes,
MOVLW 0X1F ;
MOVWF _Temp_1,ACCESS ;
BRA L811_2 ;
;--------------------------------------------;
L801 MOVLW 0X03 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 3 ?
BRA L802 ; No,
CLRF _Temp_2,ACCESS ; Yes,
MOVLW 0X3C ;
MOVWF _Temp_1,ACCESS ;
BRA L811 ;
;--------------------------------------------;
L802 MOVLW 0X04 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 4 ?
BRA L803 ; No,
CLRF _Temp_2 ; Yes,
MOVLW 0X5B ;
MOVWF _Temp_1,ACCESS ;
BRA L811 ;
;--------------------------------------------;
L803 MOVLW 0X05 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 5 ?
BRA L804 ; No,
CLRF _Temp_2 ; Yes,
MOVLW 0X79 ;
MOVWF _Temp_1,ACCESS ;
BRA L811 ;
;--------------------------------------------;
L804 MOVLW 0X06 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 6 ?
BRA L805 ; No,
CLRF _Temp_2 ; Yes,
MOVLW 0X98 ;
MOVWF _Temp_1,ACCESS ;
BRA L811 ;
;--------------------------------------------;
L805 MOVLW 0X07 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 7 ?
BRA L806 ; No,
CLRF _Temp_2 ; Yes,
MOVLW 0XB6 ;
MOVWF _Temp_1,ACCESS ;
BRA L811 ;
;--------------------------------------------;
L806 MOVLW 0X08 ;
CPFSEQ _Month_miladi,BANKED ; Is Month_miladi equal 8 ?
BRA L807 ; No,
CLRF _Temp_2
۱۵ فروردین ۱۳۸۹ - 4:37 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

ادامه
;--------------------------------------------;
L810 ;
MOVLW 0X01 ;
MOVWF _Temp_2,ACCESS ;
MOVLW 0X4F ;
MOVWF _Temp_1,ACCESS ;
;--------------------------------------------;
L811 TSTFSZ _i,ACCESS ; Is i equal 0 ?
BRA L811_4 ; No ,
BRA L811_2 ;
;--------------------------------------------;
L811_4 DECF _Temp_1,F,ACCESS ;
MOVLW 0X00 ;
SUBWFB _Temp_2,F,ACCESS
;--------------------------------------------;
L811_2 MOVF _Day_miladi,W,BANKED ;
ADDWF _Temp_1,F,ACCESS ;
MOVLW 0X00 ;
ADDWFC _Temp_2,F,ACCESS ;
;--------------------------------------------;
MOVLW 0X1C ;
CPFSGT _Year_miladi,BANKED ; Is Year_miladi greater than 28 ?
BRA L811_3 ; No,
MOVF _Year_miladi,W,BANKED ; Yes,
ANDLW 0X03 ;
DECF WREG,W,ACCESS ;
BNZ L811_3 ;
;--------------------------------------------;
TSTFSZ _Temp_2,ACCESS ; Is Temp_2 zero ?
BRA L811_5 ; No,
MOVLW 0X4E ; Yes,
CPFSGT _Temp_1,ACCESS ; Is Temp_1 greater than 78 ?
BRA L820 ; No,

L811_5 MOVLW 0X4E ;
SUBWF _Temp_1,F,ACCESS ; Yes,
MOVLW 0X00 ; Days - 78 -> Days
SUBWFB _Temp_2,F,ACCESS ;

BRA L812 ;
;--------------------------------------------;
L811_3 TSTFSZ _Temp_2,ACCESS ; Is Temp_2 zero ?
BRA L811_6 ; No,
MOVLW 0X4F ; Yes,
CPFSGT _Temp_1,ACCESS ; Is Temp_1 greater than 79 ?
BRA L820 ; No,

L811_6 MOVLW 0X4F ;
SUBWF _Temp_1,F,ACCESS ; Yes,
MOVLW 0X00 ; Days - 79 -> Days
SUBWFB _Temp_2,F,ACCESS ;
;--------------------------------------------;
ENDASM
ASM
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
;--------------------------------------------;
L812 ;
TSTFSZ _Temp_2,ACCESS ; Is Temp_2 zero ?
BRA L813 ; No,
MOVLW 0XBA ; Yes,
CPFSGT _Temp_1,ACCESS ; Is Temp_1 greater than 186 ?
BRA L814 ; No,
;uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
L813 ; Day is greather than 186 .
MOVLW 0XBA ;
SUBWF _Temp_1,F,ACCESS ; Days - 186 -> Days

MOVLW 0X07 ;
MOVWF _Month_shamsi,BANKED ;

MOVLW 0X1E ;
L817 CPFSGT _Temp_1,ACCESS ; Is Temp_1 greater than 30 ?
BRA L818 ; No,
SUBWF _Temp_1,F,ACCESS ; Yes, Days - 30 -> Days
INCF _Month_shamsi,F,BANKED ;
BRA L817 ;

L818 MOVFF _Temp_1,_Day_shamsi ;
BRA L819
۱۵ فروردین ۱۳۸۹ - 4:38 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

ادامه
L820 ; Day is equal 78 or79 or Smaller than 78 or 79 .
MOVLW 0X0B ;
ADDWF _Temp_1,F,ACCESS ; Day + 11 -->Day

MOVLW 0X1C ;
CPFSGT _Year_miladi,BANKED ; Is Year_miladi greater than 28 ?
BRA L820_1 ; NO,
; Yes,
;--------------------------------------------;
MOVF _Year_miladi,W,BANKED ; Year_miladi is greater than 28 .
ANDLW 0X03 ;
TSTFSZ WREG,ACCESS ; Is Year_miladi mod 4 zero ?
BRA L820_3 ; No,

DECF _Temp_1,F,ACCESS ; Yes,
BRA L820_2 ;

L820_3 SUBLW 0X03 ; Is Year_miladi mod 4 three ?
BNZ L820_2 ; No,
DECF _Temp_1,F,ACCESS ; Yes,
BRA L820_2 ;
;--------------------------------------------;
L820_1 DECF _Year_miladi,W,BANKED ; Year_miladi is 28 or smaller than 28 .
ANDLW 0X03 ;
TSTFSZ WREG,ACCESS ; Is (Year_miladi - 1) mod 4 zero ?
DECF _Temp_1,F,ACCESS ; No,
; Yes,
;--------------------------------------------;
;uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
L820_2 MOVLW 0X0A ;
MOVWF _Month_shamsi,BANKED ;

MOVLW 0X1E ;
L821 CPFSGT _Temp_1,ACCESS ; Is Temp_1 greater than 30 ?
BRA L822 ; No,
SUBWF _Temp_1,F,ACCESS ; Yes, Days - 30 -> Days
INCF _Month_shamsi,F,BANKED ;
BRA L821 ;

L822 MOVFF _Temp_1,_Day_shamsi ;

;uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
MOVLW 0X4E ;
ADDWF _Year_miladi,W,BANKED ; Year_shamsi = Year_miladi+78
MOVWF _Year_shamsi,BANKED ;

MOVLW 0X63 ;
CPFSGT _Year_shamsi,BANKED ; Is Year_shamsi greater than 99 ?
RETLW 0X00 ; No,
MOVLW 0X64 ;
SUBWF _Year_shamsi,F,BANKED ; Yes, Year_shamsi - 100 -> Year_shamsi ; Yes,
RETLW 0X00 ;
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;

ENDASM
;*******************************************************************************
۱۵ فروردین ۱۳۸۹ - 4:40 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

متاسفانه برنامه اسمبلی که در سه بخش بالا فرستادم به دلیل حجم زیاد درست فرستاده نشده است .
در صورت تمایل به دریافت برنامه و PDF الگوریتم به Manifester_83@yahoo.com
میل بزنید.(حتما در قسمت موضوع میل بنویسید Miladi_to_Shamsi تا به میلتان پاسخ داده شود .)(همچنین چون میل بالا ،میل اصلی ام نیست ممکن است دیر به دیر چک کنم که پیشاپیش عذر خواهی میکنم .)
۱۵ فروردین ۱۳۸۹ - 4:54 عصر | مسعود

# اصلاح الگوریتم  

به نام خدا
در الگوریتمی که در تاریخ ۱۵ فروردین ۱۳۸۹ - 4:32 عصر | مسعود

فرستاده بودم یک اشکال در مرحله سه وجود دارد که آن را اصلاح می کنم :
3- در این مر حله مشخص می کنیم که x برابر 78 است یا 79 . (از x بعدا برای محاسبات استفاده خواهد شد ) .
اگر Year_miladi کوچکتر یا مساوی 28 باشد آنگاه قراردهید x=79 و در غیر اینصورت(در صورتی که Year_miladi از 28 بزرگتر باشد )، Year_miladi رابر 4 تقسیم می کنیم،چنانچه باقیمانده این تقسیم یک بود قرار می دهیم X=78 و چنانچه باقیمانده یکی از اعداد صفر یا دو یا سه بود قرار می دهیم x=79 .
۱۶ فروردین ۱۳۸۹ - 2:26 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

سال 1369 به ميلادي چه سالي مي شود .
۱۶ فروردین ۱۳۸۹ - 4:38 عصر | sam

# پاسخ به: تاریخ میلادی به شمسی  

بسم الله الرحمن الرحیم

الگوریتم تبدیل تاریخ خورشیدی(شمسی) به میلادی

این الگوریتم قادر به تبدیل تاریخ های بین 1380 تا 1440 هجری شمسی به معادل میلادی آن می باشد .
در این الگوریتم تمام جزئیات مر بوط به سال های کبیسه میلادی و شمسی برای سال های بین 1380 تا 1440 میلادی در نظر گرفته شده است . بنابراین خروجی برنامه دقیق خواهد بود .

تعریف متغیرها :
Year_shamsi , Month_shamsi , Day_shamsi سه متغیر ورودی از نوع صحیح (Integer) می باشند که باید تاریخ شمسی ای را که می خواهیم معادل میلادی آن را بدست آوریم ، در این متغیر ها قرار دهیم .
Year_miladi , Month_miladi , Day_miladi سه متغیر خروجی از نوع صحیح (Integer) می باشند که پس از اجرای برنامه تاریخ میلادی معادل را بازمی گردانند .
x و y متغیرهایی از نوع صحیح (Integer) می باشند که در مراحل مختلف از آنها استفاده می شود .

شروع :

1- ابتدا با ید تعداد روز هایی را که از ابتدای سال شمسی گذشته است را محاسبه کرد .

برای این کار از جدول زیر که تعداد روزهای هر یک از ماه های شمسی را مشخص می کند استفاده می کنیم :

فروردین -- 31 روز
اردیبهشت -- 31 روز
خرداد -- 31 روز
تیر -- 31 روز
مرداد -- 31 روز
شهریور -- 31 روز
مهر -- 30 روز
آبان -- 30 روز
آذر -- 30 روز
دی -- 30 روز
بهمن -- 30 روز
اسفند -- 30 روز

با یک مثال روند این کار تشریح می گردد :
فرض کنید می خواهیم بدانیم برای تاریخ 23 آبان 1389 چند روز از ابتدای سال میلادی 1389 گذشته است :
Y=31(Farvardin)+31(Ordibehesht)+31(Khordad)+31(Tir)+31(Mordad)+31(Shahrivar)+30(Mehr)+23(Rooz)=239

توجه داشته باشید که آخرین عدد جمع شده برابر روز شمسی وارد شده در متغیر Day_shamsi (یعنی 23) می باشد .

2- در این مر حله مشخص می کنیم که x برابر 236 است یا 237 . (از x بعدا برای محاسبات استفاده خواهد شد ) .
اگر Year_shamsi بین 1407 تا 1441 باشد (خود 1407و 1441 جزو بازه نیستند ) ؛ آنگاه برو به Calculate_X_1 در غیر اینصورت برو به Calculate_X_2 .

Calculate_X_1 : Year_shamsi را بر 4 تقسیم کنید .(توجه کنید که Year_shamsi تنها دو رقم آخر سال شمسی است ؛ مثلا برای سال 1388 تنها 88 را در Year_shamsi ذخیره می کنیم .) اگر باقیمانده این تقسیم 3 بود قرار دهید X=287 و در غیر این صورت قرار دهید X=286 . برو به مرحله سه .

Calculate_X_2 : Year_shamsi را بر 4 تقسیم کنید .(توجه کنید که Year_shamsi تنها دو رقم آخر سال شمسی است ؛ مثلا برای سال 1388 تنها 88 را در Year_shamsi ذخیره می کنیم .) اگر باقیمانده این تقسیم صفر یا سه بود قرار دهید X=287 و در غیر این صورت قرار دهید X=286 . برو به مرحله سه .


3- اگر تعداد روز های سپری شده از ابتدای سال شمسی که در مرحله 1 آن را محاسبه کردیم (Y)، از x بزرگتر بود برو به مرحله 1_3 و در غیر اینصورت (یعنی در صورتی که کوچکتر یا مساوی Y بود) برو به مرحله 2_3 .
------------------------------------------------------------------------------------------------------------
ادامه دارد..
۱۶ فروردین ۱۳۸۹ - 8:40 عصر | مسعود

# ادامه  

------------------------------------------------------------------------------------------------------------
1_3 : Y-X را محاسبه کن و جواب را در Y ذخیره کن .

Year_shamsi بعلاوه 22 رامحاسبه کن و جواب را در Year_miladi ذخیره کن .
اگر Year_miladi بزرگترمساوی 100 بود آنگاه Year_miladi-100 را در Year_miladi ذخیره کن .

حالا باید مشخص کنید که سال میلادی بدست آمده (که دو رقم آخر آن در متغیر Year_miladii ذخیره شده است) کبیسه است یا غیر کبیسه ؟
برای این کار کافیست بررسی کنیم که باقیمانده تقسیم Year_miladi بر 4 برابر صفر است یا خیر ؛ در صورتی که این باقیمانده صفر باشد سال میلادی یک سال کبیسه است و در غیر این صورت یک سال غیر کبیسه است .
( این قانون برای سال های بین 2000 تا 2100 بر قرار است که بازه برنامه ما یعنی 1380 تا 1440 را نیز شامل می شود .) برای مثال سال 2008 یک سال میلادی کبیسه است . چون باقیمانده تقسیم دو رقم آخر آن (08) بر 4 برابر صفر می باشد . اگر سال میلادی بدت آمده کبیسه باشد ماه دوم آن (Februari) 29 روزه است و اگر غیر کبیسه باشد ماه دوم آن (Februari) 28 روزه است .

اگر Y کوچکتر مساوی 31 است قراربده 1Month_miladi و YDay_miladi ، درغیر این صورت :
Y-31 Y ، بسته به کبیسه بودن سال میلادی یکی از اعداد 28 یا 29 را برای ماه دوم میلادی انتخاب کنید ؛
اگر Y کوچکتر مساوی 28 یا 29 (بسته به کبیسه بودن یا نبودن ) است قراربده 2Month_miladi و YDay_miladi ، درغیر این صورت :
قراربده 3Month_miladi و Y-28or29Day_miladi .

پایان . (اکنون تاریخ میلادی معادل در متغیر های Year_miladi , Month_miladi , Day_miladi قرار دارد .توجه کنید که Year_miladi دو رقم آخر سال میلادی را نمایش می دهد .)
------------------------------------------------------------------------------------------------------------
2_3 :
Year_shamsi بعلاوه 21 رامحاسبه کن و جواب را در Year_miladi ذخیره کن .
اگر Year_miladi بزرگترمساوی 100 بود آنگاه Year_miladi-100 را در Year_miladi ذخیره کن .

قرار بده 306-XX و سپس قرار بده Y+XY .

اگر Y کوچکتر مساوی 31 است قراربده 3Month_miladi و YDay_miladi ، درغیر این صورت :

Y-31 Y ؛ اگر Y کوچکتر مساوی 30 است قراربده 4Month_miladi و YDay_miladi ، درغیر این صورت :
Y-30 Y ؛ اگر Y کوچکتر مساوی 31 است قراربده 5Month_miladi و YDay_miladi ، درغیر این صورت :

Y-31 Y ؛ اگر Y کوچکتر مساوی 30 است قراربده 6Month_miladi و YDay_miladi ، درغیر این صورت :

Y-30 Y ؛ اگر Y کوچکتر مساوی 31 است قراربده 7Month_miladi و YDay_miladi ، درغیر این صورت :

Y-31 Y ؛ اگر Y کوچکتر مساوی 31 است قراربده 8Month_miladi و YDay_miladi ، درغیر این صورت :

Y-31 Y ؛ اگر Y کوچکتر مساوی 30 است قراربده 9Month_miladi و YDay_miladi ، درغیر این صورت :

Y-30 Y ؛ اگر Y کوچکتر مساوی 31 است قراربده 10Month_miladi و YDay_miladi ، درغیر این صورت :

Y-31 Y ؛ اگر Y کوچکتر مساوی 30 است قراربده 11Month_miladi و YDay_miladi ، درغیر این صورت :

Y-30 Y ؛ 12Month_miladi و YDay_miladi .


پایان . (اکنون تاریخ میلادی معادل در متغیر های Year_miladi , Month_miladi , Day_miladi قرار دارد . توجه کنید که Year_miladi دو رقم آخر سال میلادی را نمایش می دهد .)

------------------------------------------------------------------------------------------------------------
۱۶ فروردین ۱۳۸۹ - 8:42 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

توجه :علامت هایی که در متن بالا وجود دارد به معنی جایگزینی است .
به امید موفقیت شما .
۱۶ فروردین ۱۳۸۹ - 8:44 عصر | مسعود

# پاسخ به sam  

بستگی به این دارد که کدام ماه سال 69 مورد نظرتان باشد.
از اول فروردین سال 1369 تا دهم دی ماه 1369 جزو سال 1990 میلادی است .
از یازدهم دی ماه سال 1369 تا آخر اسفند 1369 جزو سال 1991 میلادی است.
به امید موفقیت.
۱۶ فروردین ۱۳۸۹ - 9:17 عصر | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

سلام من این برنامه رو به زبان vbمی خواستم کسی داره
۲۱ فروردین ۱۳۸۹ - 9:14 عصر | محبوبه

# پاسخ به: تاریخ میلادی به شمسی  

سلام
متسفانه به VB ندارم .
ولی الگوریتم ساده است و مطمئنا خودتان با صرف کمی وقت می توانید الگوریتم را به زبان VB بنویسید .
۲۶ فروردین ۱۳۸۹ - 8:30 صبح | مسعود

# پاسخ به: تاریخ میلادی به شمسی  

با سلام تارخ شمسی1/3/1344برابربا تاریخ میلادی چه روزی است.روز و ماه آن دقیق مشخص شود.با تقدیم وتشکرخدابنده لو کافی نت زرین رود
۴ اردیبهشت ۱۳۸۹ - 10:01 عصر | علی حسین

# پاسخ به: تاریخ میلادی به شمسی  

آخ فاتحه خوندم به سورس کد و قیافت مرتیکه خر
من نشستم تمام وقتمو گذاشتم روی این سورس برنامه و اونو تبدیل کردم به زبان اسمبلی 8086 بعد از اینکه نوشتم فهمیدم که سورس کدت مشکل داره.
آخ الان این قدر اعصابم از دستت داغونه که می خوام بیام جرت بدم.
۹ اردیبهشت ۱۳۸۹ - 5:11 عصر | محمد

# پاسخ به: تاریخ میلادی به شمسی  

از مطالب ارائه شده در مورد تبدیل تاریخ بسیار بهره بردم
موفق باشید
۲۷ تیر ۱۳۸۹ - 6:04 عصر | www.p30ton.blogfa.com

# پاسخ به: تاریخ میلادی به شمسی  

باسلام ضمن تشکر وقدر دانی از دست اندر کاران سایت آیا محاسبه سال میلادی وتبدیل سال شمسی به میلادی در بعضی محاسبات در چین تفاوت دارد ؟مثلا برای یافتن عدد آکوای چینی برای عنصر و رنگ و.. غیره در فرد براساس تاریخ تولد شمسی بجای 621-و622--عدد21وعدد22به دورقم سمت راست تاریخ تولد اضافه میکنند ودورقم سمت راست میلادی رادرجریان محاسبه میگذارند آیا اشتباه نیست ؟ یا یافتن عد آکوا برای فرد از نظر چینی ها فرق میکند
۱۳ مرداد ۱۳۸۹ - 9:49 صبح | rokny

# پاسخ به: تاریخ میلادی به شمسی  

با سلام خدمت شما خانم طاهريان خدا خيرت بده ولي من برنامه تقويم فارسي راميخوام بدين صورت كه اگر م مثلا سال 66 را وارد كرديم در برنامه ماه مهر يا هر ماه ديگري را بعد مثلا دوباره يه سال ديگه را وارد كرديم اگر سال 66 ماه مهر اون سال يكم روز جمعه بود براساس تقويم اون سال حالا سال88 راكه زديم ماه مهر اگر هروزي يكم بود مثلا جمعه،شنبه،يكشنبه و ... به ما نشان دهد من اين فرمول راميخوام يعني تقويم ما از همون اول فارسي باشه نه ميلادي با تشكر
۴ آبان ۱۳۸۹ - 10:58 عصر | Farshad

# پاسخ به: تاریخ میلادی به شمسی  

saasfdfsdfsdf
۸ آبان ۱۳۸۹ - 9:16 عصر | ghgjhg

# پاسخ به: تاریخ میلادی به شمسی به زبان PHP  

IN HAM CODE TABDIL MILADI BE SHAMSI BE ZABANE php.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1256">
<META content="MSHTML 6.00.3790.3959" name=GENERATOR>
<TITLE> change date to shams PHP تبديل تاريخ ميلادي به شمسي در </TITLE>
</HEAD>
<body dir=ltr>
<?php

$week=Array("Sun"=>'يكشنبه' , "Mon"=>'دوشنبه' , "Tue"=>'سه شنبه' , "Wed"=> 'چهارشنبه' , "Thu"=> 'پنج شنبه' , "Fri"=>'جمعه' , "Sat"=>'شنبه') ;
$monthsa =Array(1=>'01','02','03','04','05','06','07','08','09','10','11','12');
$monthsc =Array(1=>'فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور','مهر','آبان','آذر','دي','بهمن','اسفند');

//**********************miladi
//$dr=date("w $dd $mm $yy ");
//echo $dr ;

$yearm=date('Y/m/d') ;
$ym=$yy ;
$mm=$mm ;
$dm=$dd ;

//**********************shamsi

$mkab=$mm;
$ykab=$ym;
$ykab=$ykab/4;
$ykab=substr_count($ykab,'.');

$ykab1=$ym;
$ykabw=$ykab1/4;
$ykaby=strstr($ykabw,'.');
$ykaby=substr($ykaby,1,2);

if($ykab =='0' && $mkab >'2'){
$dm=$dm+1;
}

//**********************shamsi date for m2s end
$ys=$ym-622 ;
$ms=$mm+9 ;
$ds=$dm+10 ;
//*****dar kabise in paiin dorst nist 3 sal paiin 1 sal baai

if ($mm== 1 && $dm<=20 ) { $ms=$ms ; $ds=$ds ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 1 && $dm>20 ) { $ms=$ms+1 ; $ds=$ds-30 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 2 && $dm<=19 ) { $ms=$ms ; $ds=$ds+1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 2 && $dm >19 ) { $ms=$ms+1 ; $ds=$ds-29 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 3 && $dm<=20 ) { $ms=$ms ; $ds=$ds-1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 3 && $dm >20 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-30 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
//************* kabis esfans 30 mi shavad
if($ykaby=='25' && $mkab == '1'){
$ys=$ym-622 ;
$ms=$mm+9 ;
$ds=$dm+10 ;

if ($mm== 1 && $dm<=19 ) { $ms=$ms ; $ds=$ds+1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 1 && $dm >19 ) { $ms=$ms+1 ; $ds=$ds-29 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
}
//************* kabis esfans 30 mi shavad
if($ykaby=='25' && $mkab == '2'){

$ys=$ym-622 ;
$ms=$mm+9 ;
$ds=$dm+10 ;

if ($mm== 2 && $dm<=18 ) { $ms=$ms ; $ds=$ds+2 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 2 && $dm >18 ) { $ms=$ms+1 ; $ds=$ds-28 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
}
//************* kabis esfans 30 mi shavad
if($ykaby=='25' && $mkab == '3'){

$ys=$ym-622 ;
$ms=$mm+9 ;
$ds=$dm+10 ;

if ($mm== 3 && $dm<=20 ) { $ms=$ms ; $ds=$ds ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 3 && $dm >20 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-30 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
}
//************* kabis esfans 30 mi shavad
if($ykaby=='5' && $mkab == 1){

$ys=$ym-622 ;
$ms=$mm+9 ;
$ds=$dm+10 ;


if ($mm== 1 && $dm<=20 ) { $ms=$ms ; $ds=$ds ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 1 && $dm>20 ) { $ms=$ms+1 ; $ds=$ds-30 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
}

//************* kabis esfans 30 mi shavad
if($ykaby=='5' && $mkab == 2){
$ys=$ym-622 ;
$ms=$mm+9 ;
$ds=$dm+10 ;


if ($mm== 2 && $dm<=19 ) { $ms=$ms ; $ds=$ds+1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 2 && $dm>19 ) { $ms=$ms+1 ; $ds=$ds-29 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
}
//************* kabis esfans 30 mi shavad
if($ykaby=='75' && $mkab == '3'){

$ys=$ym-622 ;
$ms=$mm+9 ;
$ds=$dm+10 ;

if ($mm== 3 && $dm<=20 ) { $ms=$ms ; $ds=$ds-1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 3 && $dm >20 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-30 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
}
//************* kabis esfans 30 mi shavad payan

if ($mm== 4 && $dm<=20 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds+1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 4 && $dm>20 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-30 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 5 && $dm<=21 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if
۲۹ آبان ۱۳۸۹ - 2:34 صبح | samad pakrou

# پاسخ به: تاریخ میلادی به شمسی bagiyye  


if ($mm== 4 && $dm<=20 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds+1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 4 && $dm>20 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-30 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 5 && $dm<=21 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 5 && $dm>21 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-31 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 6 && $dm<=21 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 6 && $dm>21 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-31 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 7 && $dm<=22 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds-1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 7 && $dm>22 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-32 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 8 && $dm<=22) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds-1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 8 && $dm>22) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-32 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 9 && $dm<=22 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds-1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 9 && $dm>22 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-32 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 10 && $dm<=22 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds-2 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 10 && $dm>22 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-32 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 11 && $dm<=21 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds-1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 11 && $dm>21 ) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-31 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}

if ($mm== 12 && $dm<=21 ) {$ys=$ys+1 ; $ms=$ms-12 ; $ds=$ds-1 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}
if ($mm== 12 && $dm>21) {$ys=$ys+1 ; $ms=$ms-11 ; $ds=$ds-31 ; $yearsh= ("$ys/" ."$ms/" ."$ds" );}



//******az file zmicrotime.php dar dakhel zdatefh.php miyad

if ($tafavot>0){
$wrooz= date('D', strtotime("+$chandr day")) ;
$wrooz = $week[$wrooz] ;
}

if ($tafavot <= 0 ){
$wrooz= date('D', strtotime("+$chandr1 day")) ;
$wrooz = $week[$wrooz] ;
}




$monch ="<span dir=ltr>$monthsc[$ms] </span>" ;
$datefarooz= "$ys " ."/ $monch /" ." $wrooz " ."$ds" ;


$yearsh= $yearsh ;
$datefarooz1= "$ys " ."/ $monch /" ." $week[$dr] " ."$ds" ;


echo "$yearsh";
//echo "<center><font color=#000000 size=2> تاريخ شمسي :<span dir=ltr> $dateasli </span> </font></center>" ;
//date shams kool
?>
۲۹ آبان ۱۳۸۹ - 2:40 صبح | samad pakrou

# پاسخ به: تاریخ میلادی به شمسی در کد های بالا  

در کدهای بالا به جای

yy = 1999 سال
mm = 11 ماه
dd = 28 روز
۲۹ آبان ۱۳۸۹ - 2:56 صبح | samad pakrou

# پاسخ به: تاریخ میلادی به شمسی  

ممنون از کمکتون
۴ آذر ۱۳۸۹ - 7:07 عصر | شیرین

# پاسخ به: تاریخ میلادی به شمسی  

salam asmi man khaliq hast mota tawalid 02 11 1994 miladi hastam mikhastam shoma lotf konid tabdil da shamsi konid age en kara konid mam non misham wa mon tazir jewabi shoma hastam
۱۳ آذر ۱۳۸۹ - 6:51 عصر | khaliql

# پاسخ به: تاریخ میلادی به شمسی  

ای بابا به همه زبون نوشتین الا vb.6!
۲۴ آذر ۱۳۸۹ - 10:51 صبح | asal

# پاسخ به: تاریخ میلادی به شمسی  

salam kheyli khob bod ag emishe be zabane vb.net ham bezarin mamnon misham
۲۸ آذر ۱۳۸۹ - 7:33 عصر | behnam

# در خواست :ایجاد فایل exe  

سلام ، می خواستم اگه امکانش هست ، نحوه ی ایجاد فایل Exe برنامه رو در چند خط برایم توضیح دهی. ممنون میشم اگه به ایمیلم بفرستید .
۱۵ اسفند ۱۳۸۹ - 9:40 عصر | حسن

# درخواست :ایجاد فایل exe در C#  

سلام ، می خواستم اگه امکانش هست ، نحوه ی ایجاد فایل Exe و کامپایل کردن برنامه رو در چند خط برایم توضیح دهید. ممنون میشم اگه به ایمیلم بفرستید .
۱۵ اسفند ۱۳۸۹ - 9:43 عصر | حسن

# پاسخ به: تاریخ میلادی به شمسی  

for the attention someone who may concern. its for a long time i am looking for something like this. but exactly in C# language . there is some resource for C# which convert the wrong date and time. especially the one on C-sharpcorner site. can anybody give a working code please ? thanks in avance
۲۹ اسفند ۱۳۸۹ - 8:36 عصر | hakan Türkoğlu

# پاسخ به: تاریخ میلادی به شمسی  

by the way,i would be glade if the resource be in english language because google.translate suck in translating persian language . thanks
۲۹ اسفند ۱۳۸۹ - 8:39 عصر | hakan Türkoğlu

# پاسخ به: تاریخ میلادی به شمسی  

i want to chang miladi to shamsi
۱۴ فروردین ۱۳۹۰ - 3:29 عصر | omid

# پاسخ به: تاریخ میلادی به شمسی  

دمت جیییز
یعنی خیلی گرم
۲۲ فروردین ۱۳۹۰ - 7:50 صبح | یاشار

# پاسخ به: تاریخ میلادی به شمسی  

#include <c:\tc\stdio.h>
#include <c:\tc\conio.h>
typedef struct _myDate
{
int year;
int month;
int day;

}myDate;

int MiladiIsLeap(int miladiYear1);
void shamsi(int y,int m, int d);
myDate addday(int y , int m,int d);
void main(void)
{
int ym,mm,dm;
ym=2011;
dm=20;
mm=4;

if (ym==0)
{ym=2000;}
if (ym<1000)
{
ym=ym+1900;

}
shamsi(ym,mm,dm);
getch();
}
int MiladiIsLeap(int miladiYear)
{
if(((miladiYear % 100)!= 0 && (miladiYear % 4) == 0) || ((miladiYear % 100)== 0 && (miladiYear % 400) == 0))
return 1;
else
return 0;

}
myDate addday(int year, int month, int day)
{
myDate milDate;


switch(month)
{
case 1:if(day==31)
{
day=1;
month=2;

}
else
{
day+=1;
}
break;

case 2:if(day==28)
{
if( MiladiIsLeap(year))
{
day=29;
}
else
{
day=1;
month=2;
}

}
break;

case 3:if(day==31)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 4:if(day==30)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 5:if(day==31)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 6:if(day==30)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 7:if(day==31)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 8:if(day==31)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 9:if(day==30)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 10:if(day==31)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 11:if(day==30)
{
day=1;
month+=1;

}
else
{
day+=1;
}
break;
case 12:if(day==31)
{
day=1;
month=1;
year+=1;

}
else
{
day+=1;
}
break;

}

milDate.year=1;
milDate.month=1;
milDate.day=1;

}
void shamsi(int y,int m,int d)
{
int year,month,day;
myDate mdate;
year=y;
month=m;
day=d;
if (year==2000)
{
if(month>2)
{
if (month>2)
{
mdate=addday(year,month,day);
year=mdate.year;
month=mdate.month;
day=mdate.day;
}
}
}
if((month<3)||((month==3)&&(day<21)))
{
year-=622;

}
else
{
year-=621;
}
switch(month)
{
case 1:if(day<21)
{
day+=10;
month=10;

}
else
{
day-=20;
month=11;
}
break;

case 2:if(day<20)
{
if( MiladiIsLeap(year))
{
day+=11;
month=11;
}


else
{
day-=19;
month=12;
}

}
break;

case 3:if(day<21)
{
day+=9;
month=12;

}
else
{
day-=20;
month=1;
}
break;
case 4:if(day<21)
{
day+=11;
month=1;

}
else
{
day-=20;
month=2;
}
break;
case 5,6:if(day<22)
{
day+=10;
month-=3;

}
else
{
day-=21;
month-=2;
}
break;
case 7,8,9:if(day<23)
{
day+=9;
month-=3;
}
else
{
day-=22;
month-=2;

}
break;
case 10:if(day<23)
{
day+=8;
month=7;

}
else
{
day-=22;
month=8;
}
break;
case 11,12:if(day==31)
{
day+=9;
month-=3;

}
else
{
day-=21;
month-=2;
}
break;


}
printf("%d\t%d\t%d\t",year,month,day);

}
۳۱ فروردین ۱۳۹۰ - 11:29 عصر | داداشی

# پاسخ به: تاریخ میلادی به شمسی  

'Function for Converting Julian date to Iranian Shamsi(Jalali) date

Function ChangeToShamsi(Julian As Date) As Date

Dim Y As Integer
Dim M As Integer
Dim D As Integer
Dim E As Integer
Dim L As Integer
Dim Temp As Date

Y=Year(Julian)
M=Month(Julian)
D=Day(Julian)

'*** Finding Julian year that its first 3 month ends with Iranian Leap Year
L=(Y - 622) Mod 33
Select Case L
Case 1, 5, 9, 13, 17, 22, 26, 30
E=1
End Select

'** Find Julian Leap years

If ((Y Mod 4)=0 And (Y Mod 100) <> 0) Or ((Y Mod 400) = 0) Then
If M > 2 Then
Temp = DateSerial(Y, M, D)
Temp = Temp + 1
Y = Year(Temp)
M = Month(Temp)
D = Day(Temp)
End If
End If

'****

If M < 3 Or (M = 3 And D < 21) Then
Y = Y - 622
Else
Y = Y - 621
End If
Select Case M
Case 1
If D < 21 Then
M = 10: D = D + 10 + E
Else
M = 11: D = D - 20 + E
End If
Case 2
If D < 20 Then
M = 11: D = D + 11 + E
Else
M = 12: D = D - 19 + E
End If
Case 3
If D < 21 Then
M = 12: D = D + 9 + E
Else
M = 1: D = D - 20 + E
End If
Case 4
If D < 21 Then
M = 1: D = D + 11
Else
M = 2: D = D - 20
End If
Case 5, 6
If D < 22 Then
M = M - 3: D = D + 10
Else
M = M - 2: D = D - 21
End If
Case 7, 8, 9
If D < 23 Then
M = M - 3: D = D + 9
Else
M = M - 2: D = D - 22
End If
Case 10
If D < 23 Then
M = 7: D = D + 8
Else
M = 8: D = D - 22
End If
Case 11, 12
If D < 22 Then
M = M - 3: D = D + 9
Else
M = M - 2: D = D - 21
End If
End Select

ChangeToShamsi=DateSerial(Y,M,D)

End Function
۱۰ اردیبهشت ۱۳۹۰ - 4:52 عصر | نويد

# پاسخ به: تاریخ میلادی به شمسی  

'Function for Converting Julian date to Iranian Shamsi(Jalali) date

Function ChangeToShamsi(Julian As Date) As Date

Dim Y As Integer
Dim M As Integer
Dim D As Integer
Dim E As Integer
Dim L As Integer
Dim Temp As Date

Y=Year(Julian)
M=Month(Julian)
D=Day(Julian)

'*** Finding Julian year that its first 3 month ends with Iranian Leap Year
L=(Y - 622) Mod 33
Select Case L
Case 1, 5, 9, 13, 17, 22, 26, 30
E=1
End Select

'** Find Julian Leap years

If ((Y Mod 4)=0 And (Y Mod 100) <> 0) Or ((Y Mod 400) = 0) Then
If M > 2 Then
Temp = DateSerial(Y, M, D)
Temp = Temp + 1
Y = Year(Temp)
M = Month(Temp)
D = Day(Temp)
End If
End If

'****

If M < 3 Or (M = 3 And D < 21) Then
Y = Y - 622
Else
Y = Y - 621
End If
Select Case M
Case 1
If D < 21 Then
M = 10: D = D + 10 + E
Else
M = 11: D = D - 20 + E
End If
Case 2
If D < 20 Then
M = 11: D = D + 11 + E
Else
M = 12: D = D - 19 + E
End If
Case 3
If D < 21 Then
M = 12: D = D + 9 + E
Else
M = 1: D = D - 20 + E
End If
Case 4
If D < 21 Then
M = 1: D = D + 11
Else
M = 2: D = D - 20
End If
Case 5, 6
If D < 22 Then
M = M - 3: D = D + 10
Else
M = M - 2: D = D - 21
End If
Case 7, 8, 9
If D < 23 Then
M = M - 3: D = D + 9
Else
M = M - 2: D = D - 22
End If
Case 10
If D < 23 Then
M = 7: D = D + 8
Else
M = 8: D = D - 22
End If
Case 11, 12
If D < 22 Then
M = M - 3: D = D + 9
Else
M = M - 2: D = D - 21
End If
End Select

ChangeToShamsi=DateSerial(Y,M,D)

End Function
۱۰ اردیبهشت ۱۳۹۰ - 4:53 عصر | نويد

# پاسخ به: تاریخ میلادی به شمسی  

اين تابع را به VBA نوشتم و فكر ميكنم درست كار مي كند اگر اشكالي در آن وجود دارد خوشحال مي شوم نظر بدهيد. منطق ساده اي دارد لطفاً تست كنيد و نتيجه را اعلام كنيد. ممنون
۱۰ اردیبهشت ۱۳۹۰ - 4:58 عصر | نويد

# پاسخ به: تاریخ شمسی به میلادی   

لطفا تاریخ های شمسی 6/12/1345 و 7/12/1336 و 9/2/1376 را به قمری بفرستید
۱۷ تیر ۱۳۹۰ - 4:53 عصر | نیوشا

# پاسخ به: تاریخ میلادی به شمسی  

با سلام
بسیار متشکرم از توضیحات خوبی که داده بودین.
فقط خواهشا اگه میشه سورس برنامه را به زبان #c برایم ایمیل کنید. ممنون میشم . خیلی عجله دارم باید پروژه مو تحویل بدم.
۱۲ آذر ۱۳۹۰ - 9:09 عصر | ساناز

# پاسخ به: تاریخ شمسی به میلادی  

لطفا سورس تبدیل تاریخ شمسی به میلادی رو به زبان ++c رو برام ایمیل کنین ممنون میشم
۷ دی ۱۳۹۰ - 10:27 عصر | مصطفی

# پاسخ به: تاریخ میلادی به شمسی  

man mikham bedoonam 4 day 1378 shamsi be miladi chi mishe?
۱۱ اردیبهشت ۱۳۹۱ - 4:41 عصر | sheeva

# پاسخ به: تاریخ میلادی به شمسی  

ba salam
in tarikh be miladi hast lotfan , roz, mah saleshro be shamsi baraye man ersal konid.
ba tashakor
۱۱ خرداد ۱۳۹۱ - 5:10 عصر | mohsen

# پاسخ به: تاریخ میلادی به شمسی  

ba salam
in tarikh be miladi hast lotfan , roz, mah saleshro be shamsi baraye man ersal konid.
ba tashakor
9اوریل1990
۱۱ خرداد ۱۳۹۱ - 5:13 عصر | mohsen

# پاسخ به: تاریخ میلادی به شمسی  

salam
mishe begid 1363/7/14 shamsi be miladi chi mishe?
۱۳ مرداد ۱۳۹۱ - 12:04 صبح | mansoureh

# پاسخ به: تاریخ میلادی به شمسی  

EFTEZAH midoni chye code eftezah tar az in nadide bodam
۳۰ آذر ۱۳۹۱ - 12:58 عصر | ss

# تاریخ میلادی به شمسی  

هیچکدوم از کدهای داده شده درست کار نمیکنه. مثلاً تاریخ 20/1/1997 معادل 1375/10/30 است. اما نتیجه بدست اومده از این کدها چیز دیگه هست. دلیلش هم اشتباه در محاسبه سال کبیسه است. چون سال کبیسه همیشه هر 4 سال یکبار نیست و گاهی اوقات بعد از 5 سال اتفاق میافته. در واقع بعد 7 دوره کبیسه 4 ساله ، کبیسه دوره 8 در سال پنجم اتفاق میافته.
تبدیل تاریخ کار ساده ای نیست. نیاز به مطالعات نجومی زیادی داره. من تا بحال هیچ تابع یا کامپوننتی رو به هیچ زبانی ندیدم که این کارو بدرستی انجاام بده. حتی سایت مرکز تقویم دانشگاه تهران هم مبدل تاریخش درست کار نمیکنه:
http://calendar.ut.ac.ir/Fa/Software/CalConv.asp
۲۳ تیر ۱۳۹۲ - 8:48 عصر | کاویان

ارسال نظرات

عنوان:  
نام:  
آدرس الکترونیکی:
زبان:
توضیح:  
لطفا متن مقابل را در زیر وارد کنید
(کوچک یا بزرگ بودن حروف مهم نیست)