View Full Version : در خصوص روز ژولیوسی چه می دانید؟
rezaTavak
شنبه 15 دی 1386, 13:42 عصر
میدانید
sys)1(
به چه دردی می خورد؟
rahro
یک شنبه 16 دی 1386, 06:31 صبح
میدانید
sys)1(
به چه دردی می خورد؟
قبلا مختصر توضیحاتی خودتان در موردش داده بودید. صبر کن نمیخوای بگی که این دستور روز ژیلوسی رو بر میگردونه؟:متعجب:
rezaTavak
یک شنبه 16 دی 1386, 12:28 عصر
http://en.wikipedia.org/wiki/Julius_Caesar
ژولیوس سزار که با سزارین http://en.wikipedia.org/wiki/Caesarian_section بدنیا آمد تقویمی طراحی کرد که سالها کاربرد داشت.
او مردی بود شبیه فیل که سکه ای طرح فیل هم در دوران او رواج داشت.
اما سزار معروف یک دو ماه به تقویم آن زمان اضافه کرد که یکی نام خودش بود.
اخترشناسان برای کار با تقویمها از دیرزمان این تقویم را مورد استفاده قرار می دادند.
فعلا تا بعد ...
روز ژولیوسی مبنای کار برای محاسبات زیر است:
تبدیل تقویمها به هم.
محاسبات نجومی.
Azimuth, Longitude برای خورشید و ماه.
::: پس :::
برای محاسبات طلوع و غروب خورشید این تقویم استفاده می شود.
در تقویمی که قبلا ارائه کرده ام روز ژولیوسی با تابع gregorian_jdn محاسبه می شود. یعنی تابع زیر :
#DEFINE GREGORIAN ISO_8601
Function Gregorian_jdn
LPARAMETERS iYear,iMonth,iDay,CalendarType
LOCAL lnYear,lnMonth,lnDay
IF PARAMETERS() < 4
CalendarType = GREGORIAN
ENDIF
IF CalendarType = GREGORIAN And ((iYear > 1582) OR ;
((iYear = 1582) And (iMonth > 10)) OR ;
((iYear = 1582) And (iMonth = 10) And (iDay > 14))) THEN
lnYear = iYear
lnMonth = iMonth
lnDay = iDay
RETURN INT((1461 * (lnYear + 4800 + INT((lnMonth - 14) / 12))) / 4) ;
+ INT((367 * (lnMonth - 2 - 12 * (INT((lnMonth - 14) / 12)))) / 12) ;
- INT((3 * (INT((lnYear + 4900 + INT((lnMonth - 14) / 12)) / 100))) / 4) ;
+ lnDay - 32075
ELSE
RETURN julian_jdn(iYear, iMonth, iDay)
ENDIF
ENDFUNC
یعنی اگر تاریخ ارائه شده از ۱۴ / ۱۰ / ۱۵۸۲ میلادی بیشتر بود از این تابع نبود از تابع زیر استفاده کن. دلیلش این است که در این تاریخ پاپ گریگوری تقویم را اصلاح کرد به و فرم امروزی آن در آورد پس تقویم میلادی جدید گریگوری است.
FUNCTION julian_jdn
PARAMETERS tnYear,tnMonth,tnDay
RETURN 367 * tnYear - INT((7 * (tnYear + 5001 + INT((tnMonth - 9) / 7))) / 4) + INT((275 * tnMonth) / 9) + tnDay + 1729777
ENDFUNC
توجه کنید که ISO یک استاندارد برای تقویم دارد:
http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm (http://www.phys.uu.nl/%7Evgent/calendar/isocalendar.htm)
که شما می توانید از آن استفاده کنید. شماره آن ISO 8601:1998
به جای این تابع فاکس پرو خودش تابع دارد:
SYS(11,{^1996-12-12})
یعنی روز ژولیوسی تاریخ فوق را بر می گرداند.
اما ممکن است شما روز ژولیوسی را داشته باشید با تابع :
sys(10,2450430)
و
sys(1)
هم روز ژولیوسی تاریخ کامییوتر را نشان می دهد یعنی معادل زیر است:
sys(11,date())
rezaTavak
پنج شنبه 20 دی 1386, 10:18 صبح
حال برای تبدیل تاریخ شمسی به روز ژولیوسی:
#DEFINE PERSIAN_EPOCH 1948321 && The JDN of 1 Farvardin 1
FUNCTION Mod1
LPARAMETERS tnNumber1, tnNumber2
RETURN SIGN(tnNumber1) * (ABS(tnNumber1) % ABS(tnNumber2)) && remain division BASIC form
ENDFUNC
Function persian_jdn
LPARAMETERS iYear, iMonth, iDay
LOCAL epbase, epyear, mdays
IF iYear >= 0 THEN
epbase = iYear - 474
ELSE
epbase = iYear - 473
ENDIF
epyear = 474 + MOD1(epbase, 2820)
IF iMonth <= 7 THEN
mdays = (iMonth - 1) * 31
ELSE
mdays = (iMonth - 1) * 30 + 6
ENDIF
RETURN iDay + mdays + INT(((epyear * 682) - 110) / 2816) ;
+ (epyear - 1) * 365 + INT(epbase / 2820) * 1029983 ;
+ (PERSIAN_EPOCH - 1)
ENDFUNC
rezaTavak
یک شنبه 23 دی 1386, 10:47 صبح
بر عکس هم ممکن است یعنی روز ژولیوسی به تاریخ که مثالهای آن در تابعی که برای تاریخ ارائه کرده ام موجود است همه توابع تبدیل با jdn یعنی روز ژولیوسی شروع می شوند.
خب برای تبدیل یک روز میلادی به شمسی:
ابتدا روز ژولیوسی را بدست می آوریم.
سپس روز را به تارخ تبدیل میکنیم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.