この投稿では、C++で現在の時刻と日付を取得する方法について説明します。
1.使用する std::chrono
C++ 11以降、C++で現在の時刻と日付を取得するための標準的なソリューションは、クロノライブラリを使用することです。で現在の時刻を取得できます std::chrono::system_clock::now()
から <chrono.h>
ヘッダー、およびそれをに変換します std::time_t
タイプ(エポックからの時間)。次に、変換します std::time_t
ローカルカレンダー時間に std::ctime
の Www Mmm dd hh:mm:ss yyyy
以下に示すフォーマット:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> #include <chrono> int main() { auto now = std::chrono::system_clock::now(); std::time_t end_time = std::chrono::system_clock::to_time_t(now); std::cout << "Current Time and Date: " << std::ctime(&end_time) << std::endl; return 0; } |
出力(変化します):
Current Time and Date: Tue Feb 08 18:40:13 2018
C++で経過時間を測定する必要がある場合は、次のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <chrono> int main() { auto start = std::chrono::system_clock::now(); // いくつかの作業を行います for (int i = 0; i < 10000000; i++) {} auto end = std::chrono::system_clock::now(); std::chrono::duration<double> elapsed_seconds = end - start; std::cout << "Elapsed Time: " << elapsed_seconds.count() << " sec" << std::endl; return 0; } |
出力(変化します):
Elapsed Time: 0.060156 sec
C++ 20以降、 std::chrono::zoned_time タイムゾーンで日付と時刻を表すため。
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> #include <chrono> int main() { std::chrono::zoned_time now { std::chrono::current_zone(), std::chrono::system_clock::now() }; std::cout << "Current Time and Date: " << std::endl; return 0; } |
2.使用する std::time
アイデアは、エポックから経過した秒数を次のように取得することです。 std::time_t
値を入力し、それをに変換します std::tm
とのインスタンス std::localtime
。アン std::tm
オブジェクトは、そのコンポーネント(秒、分、時間、日、月、年など)に分割されたカレンダーの日付と時刻を保持します。
次のコード例は、その使用法を示しています。このソリューションには <ctime>
ヘッダ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <ctime> int main() { std::time_t t = std::time(nullptr); std::tm* now = std::localtime(&t); std::cout << "Current Date: " << now->tm_mday << '/' << (now->tm_mon + 1) << '/' << (now->tm_year + 1900) << std::endl; return 0; } |
出力(変化します):
Current Date: 8/2/2018
からの日付と時刻の情報をさらに変換できます std::tm
を使用して指定されたフォーマット文字列に従って、nullで終了するマルチバイト文字へのオブジェクト strftime()
関数。たとえば、次のコードは現在の日付と時刻を次のように返します。 std::string
フォーマットで MM-DD-YYYY HH:mm:ss
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <string> #include <ctime> std::string currentDateTime() { std::time_t t = std::time(nullptr); std::tm* now = std::localtime(&t); char buffer[128]; strftime(buffer, sizeof(buffer), "%m-%d-%Y %X", now); return buffer; } int main() { std::cout << "Current Time and Date: " << currentDateTime() << std::endl; return 0; } |
出力(変化します):
Current Time and Date: 02-08-2018 18:42:41
3.使用する Boost.Date_Time
別のオプションは、 日時関数 Boostライブラリによって提供されます。 Boostライブラリで利用できる時間システムはいくつかあります。次のソリューションは boost::posix_time::microsec_clock::universal_time
ヘッダーから <boost/date_time/posix_time/posix_time>
–UTCで時刻を返します。
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <boost/date_time/posix_time/posix_time.hpp> int main() { boost::posix_time::ptime datetime = boost::posix_time::microsec_clock::universal_time(); std::cout << "Current Time and Date: " << datetime << std::endl; return 0; } |
出力(変化します):
Current Time and Date: 2018-Feb-08 18:42:41.804879
これで、C++で現在の時刻と日付を取得できます。