2010-11-05 11 views

risposta

22

EDSunriseSet è un wrapper Objective-C open source e gratuito per le routine in linguaggio C create da Paul Schlyter.

Il calcolo viene eseguito interamente tramite le routine del codice C. EDSunrisetSet colma quei calcoli per classi comuni di cacao (NSDate, NSTimeZone, ...)

+1

Questo funziona per me. È stato recentemente aggiornato (gennaio 2013) per alcuni bug di memoria, quindi se lo stai utilizzando, assicurati di ottenere l'ultimo codice. – mpemburn

6

Ho utilizzato una libreria denominata SUNWAIT. Molto semplice, efficace - facile da usare!

+0

Lo hai usato con Objective-C/per iOS? Inoltre, ci sono tutorial introduttivi? – Moshe

+0

No - solo dritto C. Puoi compilarlo come un file "C" standard e chiamarlo semplicemente. (Questo è quello che ho fatto nella mia app, ma non era un'app per iPhone). – Brad

+0

Brad - Devo compilarlo separatamente o includerlo nel mio progetto e utilizzare le chiamate API? – Moshe

8

Ho effettivamente portato il KosherJava Library e ho pianificato di renderlo disponibile presto su GitHub!

Edit:

KosherCocoa è ora vivono su GitHub! Se non hai bisogno del codice relativo al calendario ebraico, puoi eliminare il file "calendario". I file di classe sono separati piacevolmente in cartelle in base ai tipi di calcoli che fanno.

Modifica: KosherCocoa ci dovrebbe essere sostituito con un aggiornamento moderno e più completo non appena possibile. Il link sopra ora punta a un repository legacy.

+0

il link sopra a KosherCocoa è morto, ma sembra esserci ancora un paio di copie in github. https://github.com/search?q=koshercocoa – Cruinh

+0

Whoops, lo aggiusterò a breve! – Moshe

+1

@Cruinh - In realtà sto aggiornando il codice sorgente e scrivendo i test delle unità. – Moshe

1

Solo una nota .. se si utilizza il Berkley uno ... beh non funziona (in Australia almeno). Tuttavia include il codice di Paul Schlyter C, che è fantastico.

Se si desidera che funzioni ovunque, è meglio calcolare solo le date in UTC.

In SunriseAndSunset.m, sostituire il codice da doppia salita; doppio set; come segue:

sun_rise_set(theYear, theMonth, theDay, lon, lat, &rise, &set); 
int hours = HOURS(rise); 
int mins = MINUTES(rise); 
int sethrs = HOURS(set); 
int setmins = MINUTES(set); 

NSTimeInterval riseOffset = ((hours * 60) + mins) * 60; 
NSTimeInterval setOffset = ((sethrs * 60) + setmins) * 60; 

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSString *dateStr = [NSString stringWithFormat:@"%i-%02d-%02dT00:00:00+0000", theYear, theMonth, theDay]; 
NSDate *utcMidnight = [formatter dateFromString:dateStr]; 

NSDate *utcSunrise = [utcMidnight dateByAddingTimeInterval:riseOffset]; 
NSDate *utcSunset = [utcMidnight dateByAddingTimeInterval:setOffset]; 

[formatter release]; 
[gregorian release]; 

return [NSDictionary dictionaryWithObjectsAndKeys:utcSunrise, @"sunrise", utcSunset, @"sunset", nil]; 
+0

Probabilmente non sembra funzionare in Australia perché ti è stata data una data nel fuso orario GMT. Scommetto che aveva '+ 0000' invece di' + 1000' nel NSDate quando stavate eseguendo il debug. La prossima volta utilizzare '[date descriptionInLocale: [NSLocale currentLocale]]' per eseguire il debug delle date. :-) –

+0

Difficile ricordarlo fino a questo punto, ma sono abbastanza sicuro che non sia stato il caso, si trattava più di presupposti nel codice e non di test su valori anomali. Ma comunque, quanto sopra funziona bene e il loro esempio mi ha salvato un po 'di tempo. Quindi va bene! :) – DavidAWalsh

+0

Ah nessuna preoccupazione :-) Lo sto usando in Australia, quindi spero che abbiano risolto i bug. Sembra funzionare dopo quasi una settimana di test. –

4

Prova questa: https://github.com/mourner/suncalc/

molto chiaro e facile da implementare, anche se Scritto da JavaScript ma è facile per convertirlo
obiettivo-C

Inoltre supporto per calcolare sole, posizione lunare e coordinate.

2

Dopo aver trovato un'alternativa Swift, ho creato Solar: una micro-libreria Swift per Sunrise/Sunset.