2010-11-05 13 views

Respuesta

22

EDSunriseSet es un contenedor de código abierto y Objective-C gratuito para las rutinas de C de idiomas creado por Paul Schlyter.

El cálculo se realiza en su totalidad por las rutinas de C-code. EDSunrisetSet tiende un puente sobre esos cálculos a clases de cacao común (NSDate, NSTimeZone, ...)

+1

Este funciona para mí. Recientemente (enero de 2013) se actualizó para algunos errores de memoria, por lo que si lo está utilizando, asegúrese de obtener el código más reciente. – mpemburn

6

He usado una biblioteca llamada SUNWAIT. Muy simple, efectivo - ¡fácil de usar!

+0

¿Has usado esto con Objective-C/para iOS? Además, ¿hay algún tutorial para comenzar? – Moshe

+0

No, solo directamente C. Puede compilarlo como un archivo "C" estándar, y simplemente llamar a él. (Eso es lo que hice en mi aplicación, pero no era una aplicación de iPhone). – Brad

+0

Brad - ¿Debo compilarlo por separado o incluirlo en mi proyecto y usar llamadas API? – Moshe

8

En realidad, he portado el KosherJava Library y planeo que esté disponible pronto en GitHub.

Editar:

KosherCocoa ya está disponible en GitHub! Si no necesita el código relacionado con el calendario hebreo, puede eliminar el archivo "calendario". Los archivos de clase están separados muy bien en carpetas según los tipos de cálculos que realizan.

Editar: KosherCocoa usaremos para ser reemplazado con una actualización moderna y más completa tan pronto como sea posible. El enlace anterior ahora apunta a un repositorio heredado.

+0

el enlace de arriba a KosherCocoa está muerto, pero parece que todavía hay un par de copias en github. https://github.com/search?q=koshercocoa – Cruinh

+0

¡Vaya, lo arreglaré en breve! – Moshe

+1

@Cruinh - De hecho, estoy en proceso de modernizar el código fuente y las pruebas de unidad de escritura. – Moshe

1

Sólo una nota .. si se utiliza el Berkley uno ... así que no funciona (en Australia como mínimo). Sin embargo, incluye el código Paul Schlyter C, que es genial.

Si desea que funcione en cualquier lugar, lo mejor es calcular las fechas en UTC.

En SunriseAndSunset.m, reemplace el código de doble subida; juego doble; de la siguiente manera:

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

Probablemente no funcione en Australia porque le dieron una fecha en la zona horaria GMT. Apuesto a que tenía '+ 0000' en lugar de' + 1000' en el NSDate cuando estaba depurando. La próxima vez use '[date descriptionInLocale: [NSLocale currentLocale]]' para depurar fechas. :-) –

+0

Es difícil de recordar, pero estoy bastante seguro de que ese no era el caso, tenía más que ver con las suposiciones en el código y no con los valores atípicos. Pero de todos modos, lo anterior funciona bien y su ejemplo me ahorró algo de tiempo. ¡Así que eso es bueno! :) – DavidAWalsh

+0

Ah, no me preocupo :-) Lo estoy usando en Australia, así que espero que hayan corregido los errores. Parece que funciona después de casi una semana de pruebas. –

4

Prueba esto: https://github.com/mourner/suncalc/

muy clara y fácil de implementar, aunque Escrito por javascript pero es fácil de convertirlo en
Objective-C

También soporte para calcular el sol, la posición de la luna y la coordinación.

2

Después de no encontrar una alternativa simple de Swift, creé Solar: una micro biblioteca creada por Swift para Sunrise/Sunset.

Cuestiones relacionadas