Changeset 205 for trunk/SRC/Calendar
- Timestamp:
- 01/22/07 08:55:49 (17 years ago)
- Location:
- trunk/SRC/Calendar
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SRC/Calendar/caldat.pro
r163 r205 70 70 IF n_elements(key_caltype) EQ 0 THEN key_caltype = 'greg' 71 71 if keyword_set(ndayspm) then key_caltype = '360d' 72 73 nParam = N_PARAMS() 74 IF (nParam LT 1) THEN MESSAGE, 'Incorrect number of arguments.' 75 72 76 CASE key_caltype OF 73 77 'greg':BEGIN 74 75 nParam = N_PARAMS()76 IF (nParam LT 1) THEN MESSAGE, 'Incorrect number of arguments.'77 78 78 79 min_julian = -1095 … … 110 111 year = TEMPORARY(year) - (month GT 2) 111 112 year = year - (year LE 0) 112 ; see if we need to do hours, minutes, seconds113 IF (nParam GT 4) THEN BEGIN114 fraction = julian + 0.5d - TEMPORARY(julLong)115 hour = floor(fraction * 24d)116 fraction = TEMPORARY(fraction) - hour/24d117 minute = floor(fraction*1440d)118 second = (TEMPORARY(fraction) - minute/1440d) * 86400d119 ENDIF120 121 ; if julian is an array, reform all output to correct dimensions122 IF (SIZE(julian, /N_DIMENSION) GT 0) THEN BEGIN123 dimensions = SIZE(julian, /DIMENSION)124 month = REFORM(month, dimensions)125 day = REFORM(day, dimensions)126 year = REFORM(year, dimensions)127 IF (nParam GT 4) THEN BEGIN128 hour = REFORM(hour, dimensions)129 minute = REFORM(minute, dimensions)130 second = REFORM(second, dimensions)131 ENDIF132 ENDIF133 113 134 114 END 135 115 '360d':BEGIN 136 137 jul = long(julian) 138 f = (jul - floor(jul)) 139 IF total(f NE 0.0) GT 0 THEN BEGIN ;Get hours, minutes, seconds. 140 hour = floor(f*24.) 141 f = f - hour / 24.d 142 minute = floor(f*1440) 143 second = (f - minute/1440.d0) * 86400.0d0 144 ENDIF ELSE BEGIN 145 hour = replicate(0L, n_elements(julian)) 146 minute = replicate(0L, n_elements(julian)) 147 second = replicate(0L, n_elements(julian)) 148 ENDELSE 149 116 150 117 IF keyword_set(ndayspm) THEN BEGIN 151 118 IF ndayspm EQ 1 THEN ndayspm = 30 … … 153 120 154 121 ndayspm = long(ndayspm) 155 Z = floor(julian)156 year = z/(12*ndayspm)+1157 month = ( z-(12*ndayspm)*(year-1))/ndayspm+1158 day = z-(12*ndayspm)*(year-1)-ndayspm*(month-1)122 julLong = FLOOR(julian + 0.5d) ;Better be long 123 year = julLong/(12*ndayspm)+1 124 month = (julLong-(12*ndayspm)*(year-1))/ndayspm+1 125 day = julLong-(12*ndayspm)*(year-1)-ndayspm*(month-1) 159 126 WHILE total(day LT 1) GT 0 DO BEGIN 160 127 tochange = where(day LT 1) … … 173 140 'noleap':BEGIN 174 141 175 jul = long(julian) 176 year = jul/365 + 1 177 day = jul MOD 365L 178 ; 142 julLong = FLOOR(julian + 0.5d) ;Better be long 143 year = julLong/365 + 1 144 day = julLong MOD 365L 179 145 ; 180 146 zero = where(day EQ 0) 181 147 ; 182 148 month = 1 + (day GT 31) + (day GT 59) + (day GT 90) + (day GT 120) $ 183 149 + (day GT 151) + (day GT 181) + (day GT 212) + (day GT 243) $ … … 195 161 day[zero] = 31L 196 162 ENDIF 197 163 ; 198 164 END 199 165 ELSE:BEGIN … … 206 172 IF cnt NE 0 THEN year[zero] = year[zero]-654321L 207 173 ; 174 ; see if we need to do hours, minutes, seconds 175 IF (nParam GT 4) THEN BEGIN 176 fraction = julian + 0.5d - TEMPORARY(julLong) 177 hour = floor(fraction * 24d) 178 fraction = TEMPORARY(fraction) - hour/24d 179 minute = floor(fraction*1440d) 180 second = (TEMPORARY(fraction) - minute/1440d) * 86400d 181 ENDIF 182 183 ; if julian is an array, reform all output to correct dimensions 184 IF (SIZE(julian, /N_DIMENSION) GT 0) THEN BEGIN 185 dimensions = SIZE(julian, /DIMENSION) 186 month = REFORM(month, dimensions, /overwrite) 187 day = REFORM(day, dimensions, /overwrite) 188 year = REFORM(year, dimensions, /overwrite) 189 IF (nParam GT 4) THEN BEGIN 190 hour = REFORM(hour, dimensions, /overwrite) 191 minute = REFORM(minute, dimensions, /overwrite) 192 second = REFORM(second, dimensions, /overwrite) 193 ENDIF 194 ENDIF 195 ; 208 196 return 209 197 -
trunk/SRC/Calendar/date2jul.pro
r157 r205 50 50 + 2000 * (year GE 1 AND year LE 49) 51 51 ;------------------------------------------------------------ 52 return, julday(month, day, year) 52 IF array_equal(date, long(date)) THEN return, julday(month, day, year) 53 54 fraction = date - long(date) 55 hour = floor(fraction * 24d) 56 fraction = TEMPORARY(fraction) - hour/24d 57 minute = floor(fraction*1440d) 58 second = (TEMPORARY(fraction) - minute/1440d) * 86400d 59 60 return, julday(month, day, year, hour, minute, second) 61 53 62 end 54 63 -
trunk/SRC/Calendar/jul2date.pro
r157 r205 30 30 compile_opt idl2, strictarrsubs 31 31 ; 32 33 caldat, jday, month, day, year 34 32 caldat, jday, month, day, year, hour, min, sec 33 ; 35 34 res = (10000L*year + 100L*month + day)*(year GE 0) $ 36 35 +( 10000L*year - 100L*month - day)*(year LT 0) 36 ; 37 IF total([hour NE 12, min NE 0, sec NE 0]) EQ 0 THEN return, long(res) $ 38 ELSE return, double(res) + (hour / 24.0d0) + (min/1440.0d0) + (sec / 86400.0d0) 37 39 38 return, long(res)39 40 end -
trunk/SRC/Calendar/julday.pro
r163 r205 93 93 if keyword_set(ndayspm) then key_caltype = '360d' 94 94 ; 95 96 95 YEAR = long(yearin) 97 96 zero = where(year EQ 0, cnt) … … 100 99 CASE key_caltype OF 101 100 'greg':BEGIN 102 103 101 104 102 ; Gregorian Calender was adopted on Oct. 15, 1582 … … 245 243 if n_elements(Hour) + n_elements(Minute) + n_elements(Second) eq 0 then $ 246 244 return, JUL 247 if n_elements(Hour) eq 0 then Hour = 0245 if n_elements(Hour) eq 0 then Hour = 12 248 246 if n_elements(Minute) eq 0 then Minute = 0 249 247 if n_elements(Second) eq 0 then Second = 0 250 248 251 IF Hour+Minute+SecondEQ 0 THEN return, JUL ELSE $252 return, JUL + (Hour / 24.0d0 ) + (Minute/1440.0d0) + (Second / 86400.0d0)249 IF total([hour NE 12, minute NE 0, second NE 0]) EQ 0 THEN return, JUL ELSE $ 250 return, JUL + (Hour / 24.0d0 - 0.5d) + (Minute/1440.0d0) + (Second / 86400.0d0) 253 251 254 252 END … … 275 273 daysyear = long(total([0, 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30], /cumulative)) 276 274 277 return, 365*L_YEAR + daysyear[L_MONTH] + L_DAY 275 JUL = 365*L_YEAR + daysyear[L_MONTH] + L_DAY 276 if n_elements(Hour) + n_elements(Minute) + n_elements(Second) eq 0 then $ 277 return, JUL 278 if n_elements(Hour) eq 0 then Hour = 12 279 if n_elements(Minute) eq 0 then Minute = 0 280 if n_elements(Second) eq 0 then Second = 0 281 282 IF total([hour NE 12, minute NE 0, second NE 0]) EQ 0 THEN return, JUL ELSE $ 283 return, JUL + (Hour / 24.0d0 - 0.5d) + (Minute/1440.0d0) + (Second / 86400.0d0) 278 284 279 285 END
Note: See TracChangeset
for help on using the changeset viewer.