Почему C struct tm (time.h) возвращает неправильный месяц? - PullRequest
2 голосов
/ 10 апреля 2020

В настоящее время это 10 апреля 2020 года. Я сделал функцию конвертации целочисленного месяца в строковый месяц в C. Он принимает целое число и возвращает строку. Почему-то думает, что это март . Я выяснил, является ли проблема моим конвертером или чем-то еще, я распечатал myTime->tm_mon, и он вернул 2 (март), когда он должен вернуть 3 (апрель). Может ли кто-нибудь найти (что я предполагаю) мою ошибку и указать мне?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct tm tm;

void *numberToLetters(int month) {
    char *smonth;
    switch (month) {
    case (0):
        smonth = "January";
        break;
    case (1):
        smonth = "February";
        break;
    case (2):
        smonth = "March";
        break;
    case (3):
        smonth = "April";
        break;
    case (4):
        smonth = "May";
        break;
    case (5):
        smonth = "June";
        break;
    case (6):
        smonth = "July";
        break;
    case (7):
        smonth = "August";
        break;
    case (8):
        smonth = "September";
        break;
    case (9):
        smonth = "October";
        break;
    case (10):
        smonth = "November";
        break;
    case (11):
        smonth = "December";
        break;
    default:
        return NULL;
    }
    return smonth;
}

int main() {
    time_t present;
    time(&present);
    tm *myTime = &present;
    void *month = (char *)numberToLetters(myTime->tm_mon);
    printf("%s\n", month);
    return 0;
}

1 Ответ

6 голосов
/ 10 апреля 2020

time () возвращает time_t , чтобы преобразовать его в tm структуру, вы можете использовать localtime ()

Изменить на

tm *myTime = localtime(&present);

И он печатает апрель

...