Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <time.h>
- #include <stdio.h>
- enum
- {
- SYS_START_YEAR = 1900,
- START_DAY = 7,
- START_MONTH = 19,
- START_YEAR = 1925,
- SEC_PER_DAY = 86400,
- DAYS_PER_MONTH = 30,
- MONTH_PER_YEAR = 12
- };
- time_t
- get_time(int curr_y, int curr_m, int curr_d)
- {
- struct tm curr = {.tm_year = curr_y - SYS_START_YEAR, .tm_mon = curr_m - 1, .tm_mday = curr_d,
- .tm_hour = 0, .tm_min = 0, .tm_sec = 0, .tm_isdst = -1};
- return mktime(&curr);
- }
- void
- get_new_time(int *curr_y, int *curr_m, int *curr_d)
- {
- struct tm buf = {};
- time_t zero_time = time(NULL);
- localtime_r(&zero_time, &buf); // Greenwich MT offset
- long long ref_time = get_time(START_YEAR, START_MONTH, START_DAY);
- long long curr_time = (long long)get_time(*curr_y, *curr_m, *curr_d);
- long long sec = curr_time - ref_time + buf.tm_gmtoff;
- long long day = sec / SEC_PER_DAY;
- long long mon = day / DAYS_PER_MONTH;
- printf("%lld %lld %lld\n", mon / MONTH_PER_YEAR + 1, mon % MONTH_PER_YEAR + 1, day % DAYS_PER_MONTH + 1);
- }
- int
- main(int argc, char *argv[])
- {
- int curr_y;
- int curr_m;
- int curr_d;
- while (scanf("%d %d %d", &curr_y, &curr_m, &curr_d) == 3) {
- get_new_time(&curr_y, &curr_m, &curr_d);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment