如何在tm结构中将日期字符串转换为tm_wday

时间:2010-08-02 09:52:32

标签: c

我有一个日期字符串格式,比如“2010-03-01”,我希望得到的“tm_wday”等同于周一,周二......

有人可以给我一个如何在c中实现这个目的的提示吗?

2 个答案:

答案 0 :(得分:3)

检查strptime()功能:

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

strptime()函数是strftime(3)的逆函数并转换为   s指向存储在tm结构中的值的字符串   tm指向,使用格式指定的格式。

答案 1 :(得分:1)

使用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;
}