2011-02-23 68 views
2

我想了解如何獲取日期(第一天,第二天等;月;以及年)中的日期(星期幾;月中的某一天)。在Microsoft Visual C++ 2010 Express中,下面的代碼中帶有下劃線的部分獲得誤差: INT TM :: TM wday 錯誤:非靜態成員引用必須是相對於特定oject如何在vC++中獲取windows時間?

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

「A = TM :: tm_wday;」
獲取相同的錯誤。

請幫我刪除這個錯誤。

+0

當你說'tm.tm_wday'時,你正在訪問一個具有對象'tm'的類/結構成員'tm_wday'。但是,程序中的「tm」是什麼? – Mahesh 2011-02-23 04:27:20

回答

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來格式化輸出,而是定義自己的星期幾名稱陣列。它不僅包含已經創建的那些(以及月份名稱等),還可以(至少在內存服務時)根據語言環境對名稱進行本地化。

相關問題