2016-11-24 23 views
0

我經由C++當前時間 - >兩個數字

#include <ctime> 
time_t sec = time(NULL); 
tm* curTime = localtime(&sec);  
cout << "Date: " << curTime->tm_mday << "." << curTime->tm_mon << "." << curTime->tm_year+1900 << endl; 
cout << "Time: " << curTime->tm_hour << ":" << curTime->tm_min << ":" << curTime->tm_sec << endl; 

顯示當前的日期/時間實際上它顯示例如

Date: 4.10.2016 
Time: 9:54:0 

我有2個問題在這裏:

  1. 我想兩位數字兩種,日期(日期和月份)和時間(小時,分,秒)。所以它應該顯示04.10.2016和09:54:00
  2. 今天,它顯示24.10.2016,但今天是2016年11月24日。它爲什麼顯示十月份而不是十一月份? Linux時鐘正確顯示時間。

感謝您的幫助:)

+0

2.月份的索引從0到11(0表示1月份,11月份是12月份),因此您必須+1數字 – user7777777

+0

您使用哪種C++標準? –

+0

我正在使用-std = C++ 0x,因爲-std = C++ 11在我的計算機上沒有以某種方式激活(我沒有權利對其進行更改)。 – Kapa

回答

0
  1. 應使用機械手進行打印。 在輸出( 「%02D」,curTime-> tm_hour) 在COUT,就可以使用, 的std :: COUT < <的std ::運輸及工務局局長(2)< <的std :: setfill( '0')< < CURTIME - > tm_hour。

  2. tm_mon從0到11.所以您應該使用tm_mon + 1進行打印。

+0

太棒了!謝謝...沒有想到setfill(0):) – Kapa

0
  1. 有幾種方法。

如果使用C++ 11,你的編譯器的std :: put_time()從實施了iomanip頭(雖然不是很遺憾,您的情況):

std::cout << "Date: " << std::put_time(curTime, "%d.%m.%Y") << std::endl; 
std::cout << "Time: " << std::put_time(curTime, "%H:%M:%S") << std::endl; 

如果使用舊編譯器版本(你的情況下):

std::string to_string(const char* format, tm* time) { 
    std::vector<char> buf(100, '\0'); 
    buf.resize(std::strftime(buf.data(), buf.size(), format, time)); 
    return std::string(buf.begin(), buf.end()); 
} 
std::cout << "Date: " << to_string("%d.%m.%Y", curTime) << std::endl; 
std::cout << "Time: " << to_string("%H.%M.%S", curTime) << std::endl; 
  • 如user7777777提到的,tm_mon = 0..11。