Add calculations to switch between UTC and local time

old-version-gtk3
Zwerg12 2020-07-09 23:39:52 +02:00
rodzic 337f661cf0
commit c03a2d49c1
3 zmienionych plików z 75 dodań i 21 usunięć

Wyświetl plik

@ -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");
}

Wyświetl plik

@ -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);

Wyświetl plik

@ -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;