#include #include #include #include #include #include #include "tztable.h" /*it's not case sensitive returns the offset returns -1 if it doesn't find it*/ int findintable(char *what){ for(size_t i = 0; i < TZTABLE_LENGHT; i++){ if((strcasecmp(what, tz_table[i].zn)) == 0){ return tz_table[i].offset; } } return -1; } davidtime strtimetoint(char *whattimeisit) { davidtime timehoursandminutes = {0, 0}; if (whattimeisit == NULL)return timehoursandminutes; char buf[16]; strncpy(buf, whattimeisit, sizeof(buf) - 1); buf[sizeof(buf) - 1] = '\0'; char *token = strtok(buf, ":"); if (token == NULL) return timehoursandminutes; timehoursandminutes.hour = atoi(token); token = strtok(NULL, ":"); if (token == NULL) return timehoursandminutes; timehoursandminutes.minutes = atoi(token); return timehoursandminutes; } char* gethhmm(char* buffer, size_t max_size) { time_t raw_time; struct tm* time_info; time(&raw_time); time_info = localtime(&raw_time); strftime(buffer, max_size, "%H:%M", time_info); return buffer; } int convert(char *timey, char *zone){ time_t rawtime = time(NULL); struct tm *ptm = gmtime(&rawtime); ptm->tm_isdst = -1; time_t gmt = mktime(ptm); int offset = difftime(rawtime, gmt) / 60; //this sould take even daylight savings too, i stole it from stack overflow i've been trying to not use llms to code shit like this //tmzn hour --> utc00 --> local time int zntime = findintable(zone); if(zntime == -1)return -1; davidtime eugh = strtimetoint(timey); int total = eugh.hour * 60 + eugh.minutes - zntime + offset; //ok this is better yeah int day = 0; while (total < 0){ total += 1440; day--; } while (total >= 1440){ total -= 1440; day++; } printf("%02d:%02d", total / 60, total % 60); if(day) printf(" %+dd", day); printf("\n"); return 0; } int main (int argc, char **argv){ if((argc <= 1) || (argc > 3)){ printf("%s: usage: %s [TIME (24hs)] [ZONE]\ne.g: %s 7:15 est\n\nalso get relative times like %s [ZONE]\ne.g: %s est\n", argv[0], argv[0], argv[0], argv[0], argv[0]); exit(0); } char timestr[16]; gethhmm(timestr, sizeof(timestr)); if (argc == 2) { if (isdigit((unsigned char)argv[1][0])) { printf("timezones don't have numbers in them\n"); return 1; } if (convert(timestr, argv[1]) == -1) { printf("%s: time zone not found, did you write it correctly?\n", argv[0]); return 1; } return 0; } if(convert(argv [1], argv[2]) == -1){ printf("%s: time zone not found, did you write it correctly?\n", argv[0]); return 1; }else return 0; }