如何在vc ++中获取windows时间?

时间:2011-02-23 04:18:47

标签: c++ visual-c++

我试图找出如何获取日期(星期几;第1天,第2天等;月份和年份)的日期。在Microsoft Visual C ++ 2010 Express中,以下代码的带下划线的部分会收到错误: int tm :: tm wday 错误:非静态成员引用必须相对于特定的对象

#include <iostream>
#include <time.h>
using namespace std;
int main () 
{
int a;
a = tm.tm_wday;
}

“a = tm :: tm_wday;”
 得到同样的错误。

请帮我删除此错误。

2 个答案:

答案 0 :(得分:4)

tm是一个结构。您需要创建一个对象来访问它的成员。

请参阅http://www.cplusplus.com/reference/clibrary/ctime/localtime/以获取示例

答案 1 :(得分:2)

通常你会做这样的事情:

#include <time.h>
#include <iostream>

int main() { 
    static const char *names[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

    time_t current = time(NULL);
    struct tm *now = localtime(&current);

    std::cout << names[now->tm_wday];
    return 0;
}

现在看来,这只会打印一周当天的缩写,但是(当然)一旦用正确的数据初始化struct tm,就可以使用来自的所有字段它是你想要的。

但请注意,localtime返回静态分配的缓冲区的地址。调用任何其他时间函数都可以覆盖该缓冲区,因此如果您需要任何时间长度的数据,通常需要定义struct tm来存储它,并从localtime使用的缓冲区中复制数据进入你自己的缓冲区。

另请注意,您通常希望使用strftime格式化输出,而不是定义自己的星期几名称数组。它不仅内置了那些(以及月份的名称等),而且(至少在内存服务的情况下)也可以根据语言环境对名称进行本地化。