как преобразовать строку даты в tm_wday в структуре tm - PullRequest
4 голосов
/ 02 августа 2010

У меня есть формат строки даты, например, "2010-03-01", и я хочу получить эквивалент "tm_wday", например, понедельник, вторник ...

Может кто-нибудь дать мне подсказкуо том, как этого добиться в с?

Ответы [ 2 ]

3 голосов
/ 02 августа 2010

Проверьте функцию strptime():

char *strptime(const char *s, const char *format, struct tm *tm); 

Функция strptime () является функцией, обратной к strftime (3) и преобразуетстрока символов, на которую указывает s, указывает на значения, которые хранятся в структуре tm, на которую указывает tm, используя формат, указанный в формате.

1 голос
/ 09 октября 2013

Используйте mktime() для расчета дня недели.

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

int main(void) {
  const char *p = "2010-03-01";
  struct tm t;
  memset(&t, 0, sizeof t);  // set all fields to 0
  if (3 != sscanf(p,"%d-%d-%d", &t.tm_year, &t.tm_mon, &t.tm_mday)) {
    ; // handle error;
  }
  // Adjust to struct tm references
  t.tm_year -= 1900;
  t.tm_mon--;
  // Calling mktime will set the value of tm_wday
  if (mktime(&t) < 0) {
    ; // handle error;
  }
  printf("DOW(%s):%d (0=Sunday, 1=Monday, ...)\n", p, t.tm_wday);
  // DOW(2010-03-01):1 (0=Sunday, 1=Monday, ...)
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...