kopia lustrzana https://gitlab.com/Zwarf/picplanner
Add calculations to switch between UTC and local time
rodzic
337f661cf0
commit
c03a2d49c1
|
@ -13,17 +13,80 @@ float calc_rad_deg (float rad) {
|
|||
return 180/M_PI*rad;
|
||||
}
|
||||
|
||||
int times_to_zone (int day_utc, int hour_utc, int day_local, int hour_local){
|
||||
int time_zone;
|
||||
if (day_utc == day_local){
|
||||
time_zone = hour_local - hour_utc;
|
||||
}
|
||||
else{
|
||||
if (abs(day_utc-day_local)>1){
|
||||
if (day_utc < day_local){
|
||||
day_local = day_utc-1;
|
||||
}
|
||||
else{
|
||||
day_local = day_utc+1;
|
||||
}
|
||||
}
|
||||
time_zone = 24*(day_local-day_utc)+(hour_local-hour_utc);
|
||||
}
|
||||
return time_zone;
|
||||
}
|
||||
|
||||
void utc_zone_to_time (int *time_utc, int *time_local){
|
||||
int sign = *(time_utc+6)/abs(*(time_utc+6));
|
||||
*(time_local+3) = *(time_utc+3)+*(time_utc+6);
|
||||
if (*(time_local+3)>24 || *(time_local+3) < 0){ /* Test if hours are still inside the same day */
|
||||
*(time_local+3) = *(time_local+3)%24;
|
||||
*(time_local+2) = *(time_utc+2)+sign;
|
||||
if (*(time_local+2) > max_day_in_month (*(time_utc+1), *(time_utc)) || *(time_local+2) < 1){ /* Test if days are still inside the same month */
|
||||
*(time_local+2) = (*(time_local+2)-1)%max_day_in_month (*(time_utc+1)+sign, *(time_utc))+1;
|
||||
*(time_local+1) = *(time_utc+1)+sign;
|
||||
if (*(time_local+1) > 12 || *(time_local+1) < 1){ /* Test if months are still inside the same year */
|
||||
*(time_local+1) = (*(time_local+1)-1)%12+1;
|
||||
*(time_local) = *(time_utc)+sign;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int max_day_in_month (int month, int year){
|
||||
int max_days = 30;
|
||||
/* check which month is set */
|
||||
switch (month) {
|
||||
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
||||
max_days = 31;
|
||||
break;
|
||||
case 2:
|
||||
/* definition of a leap year: Every fourth year is a leap year expect if year%100 is 0 e.g. 1900
|
||||
* but every year where year%400 is 0 is a leap year again e.g. 2000 */
|
||||
if ((year%4==0 && year%100!=0) || year%400==0) {
|
||||
max_days = 29;
|
||||
}
|
||||
else {
|
||||
max_days = 28;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return max_days;
|
||||
}
|
||||
|
||||
|
||||
/* Get current time and date and return as a pointer to an array */
|
||||
void calc_time_utc (int *time_utc)
|
||||
{
|
||||
time_t t;
|
||||
struct tm tmp_local;
|
||||
struct tm *tmp;
|
||||
|
||||
t = time(NULL);
|
||||
t = time(&t);
|
||||
|
||||
tmp = localtime(&t);
|
||||
memcpy(&tmp_local, tmp, sizeof(struct tm));
|
||||
tmp = gmtime(&t);
|
||||
|
||||
g_print ("UTC: %02d:%02d:%02d - %d.%d.%d\n", tmp->tm_hour, tmp->tm_min, tmp->tm_sec, tmp->tm_mday, tmp->tm_mon+1, tmp->tm_year+1900);
|
||||
int time_zone = times_to_zone (tmp->tm_mday, tmp->tm_hour, tmp_local.tm_mday, tmp_local.tm_hour);
|
||||
|
||||
g_print ("UTC: %02d:%02d:%02d - %d.%d.%d, Time zone: %d\n", tmp->tm_hour, tmp->tm_min, tmp->tm_sec, tmp->tm_mday, tmp->tm_mon+1, tmp->tm_year+1900, time_zone);
|
||||
|
||||
*(time_utc) = tmp->tm_year+1900;
|
||||
*(time_utc+1) = tmp->tm_mon+1;
|
||||
|
@ -31,6 +94,7 @@ void calc_time_utc (int *time_utc)
|
|||
*(time_utc+3) = tmp->tm_hour;
|
||||
*(time_utc+4) = tmp->tm_min;
|
||||
*(time_utc+5) = tmp->tm_sec;
|
||||
*(time_utc+6) = time_zone;
|
||||
g_print ("Time calculated");
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,12 @@ float calc_deg_rad (float deg);
|
|||
|
||||
float calc_rad_deg (float rad);
|
||||
|
||||
int times_to_zone (int day_utc, int hour_utc, int day_local, int hour_local);
|
||||
|
||||
void utc_zone_to_time (int *time_utc, int *time_local);
|
||||
|
||||
int max_day_in_month (int month, int year);
|
||||
|
||||
void calc_time_utc (int *time_utc);
|
||||
|
||||
void calc_jd (int *time_utc, double *time_jd);
|
||||
|
|
22
src/main.c
22
src/main.c
|
@ -105,23 +105,7 @@ static int correct_time (GtkWidget *widget, gpointer data){
|
|||
entry_month_string = gtk_combo_box_get_active_id (entry_month);
|
||||
entry_year_double = gtk_spin_button_get_value (entry_year);
|
||||
|
||||
int max_days = 30;
|
||||
/* check which month is set */
|
||||
switch (atoi(entry_month_string)) {
|
||||
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
|
||||
max_days = 31;
|
||||
break;
|
||||
case 2:
|
||||
/* definition of a leap year: Every fourth year is a leap year expect if year%100 is 0 e.g. 1900
|
||||
* but every year where year%400 is 0 is a leap year again e.g. 2000 */
|
||||
if (((int)entry_year_double%4==0 && (int)entry_year_double%100!=0) || (int)entry_year_double%400==0) {
|
||||
max_days = 29;
|
||||
}
|
||||
else {
|
||||
max_days = 28;
|
||||
}
|
||||
break;
|
||||
}
|
||||
int max_days = max_day_in_month (atoi(entry_month_string), (int)entry_year_double);
|
||||
|
||||
/* adjust the max. day that can be set */
|
||||
GtkAdjustment *d_adjust;
|
||||
|
@ -141,7 +125,7 @@ static int correct_time (GtkWidget *widget, gpointer data){
|
|||
|
||||
static int set_time_now (GtkWidget *widget, gpointer data){
|
||||
g_print("Now\n");
|
||||
int time_utc_now[6];
|
||||
int time_utc_now[7];
|
||||
calc_time_utc (time_utc_now);
|
||||
gtk_spin_button_set_value (entry_year, time_utc_now[0]);
|
||||
gtk_combo_box_set_active (entry_month, time_utc_now[1]-1);
|
||||
|
@ -170,7 +154,7 @@ static int calculate (GtkWidget *widget, gpointer data)
|
|||
float longitude = atof(east_entry_string);
|
||||
g_print("Calculation ongoing\n");
|
||||
|
||||
int time_utc_now[6];
|
||||
int time_utc_now[7];
|
||||
calc_time_utc (time_utc_now);
|
||||
hand_milky_way (latitude, longitude, time_utc_now);
|
||||
return 1;
|
||||
|
|
Ładowanie…
Reference in New Issue