我试图找出如何获取日期(星期几;第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;”
得到同样的错误。
请帮我删除此错误。
答案 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(¤t);
std::cout << names[now->tm_wday];
return 0;
}
现在看来,这只会打印一周当天的缩写,但是(当然)一旦用正确的数据初始化struct tm
,就可以使用来自的所有字段它是你想要的。
但请注意,localtime
返回静态分配的缓冲区的地址。调用任何其他时间函数都可以覆盖该缓冲区,因此如果您需要任何时间长度的数据,通常需要定义struct tm
来存储它,并从localtime
使用的缓冲区中复制数据进入你自己的缓冲区。
另请注意,您通常希望使用strftime
格式化输出,而不是定义自己的星期几名称数组。它不仅内置了那些(以及月份的名称等),而且(至少在内存服务的情况下)也可以根据语言环境对名称进行本地化。