[解決済み] C++でstd::chronoを使って日付と時刻を出力する
2023-05-17 07:45:45
質問
私はいくつかの古いコードをアップグレードしており、可能な限り c++11 に更新しようとしています。次のコードは、私が私のプログラムで時間と日付を表示するために使用した方法です。
#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>
const std::string return_current_time_and_date() const
{
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
return buf;
}
std::chrono(または類似のもの)を使って、現在の時刻と日付を同様のフォーマットで出力したいのですが、どのようにすればよいのかわかりません。どんな助けでも非常に感謝されます。ありがとうございます。
どのように解決するのですか?
この
<chrono>
ライブラリは時間だけを扱い、日付は扱いません。
system_clock
には、そのタイムポイントを
time_t
. そのため
<chrono>
を使ってもあまり改善されません。うまくいけば、次のようなものが得られるかもしれません。
chrono::date
のようなものが、そう遠くない未来にできるといいですね。
とはいうものの、このような場合
<chrono>
を次のように使用します。
#include <chrono> // chrono::system_clock
#include <ctime> // localtime
#include <sstream> // stringstream
#include <iomanip> // put_time
#include <string> // string
std::string return_current_time_and_date()
{
auto now = std::chrono::system_clock::now();
auto in_time_t = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X");
return ss.str();
}
なお
std::localtime
はデータ競合を引き起こす可能性があります。
localtime_r
などの関数が利用できるかもしれません。
更新しました。
新しいバージョンの Howard Hinnant の 日付ライブラリ を書けばいいのです。
#include "date.h"
#include <chrono>
#include <string>
#include <sstream>
std::string return_current_time_and_date() {
auto now = std::chrono::system_clock::now();
auto today = date::floor<days>(now);
std::stringstream ss;
ss << today << ' ' << date::make_time(now - today) << " UTC";
return ss.str();
}
これは "2015-07-24 05:15:34.043473124 UTC" のように出力されます。
関係ない話ですが、リターン
const
オブジェクトを返すことは、C++11 で望ましくないことになりました。const の戻り値は移動できません。また、末尾のconstはメンバー関数でのみ有効であり、この関数はメンバーになる必要がないため、末尾のconstを削除しています。
関連
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] time(1) の出力における 'real', 'user' および 'sys' はどのような意味ですか?
-
[解決済み] Androidで現在の時刻と日付を取得する方法
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] std::move()とは何ですか?また、どのような場合に使用するのですか?
-
[解決済み] C++で現在の時刻と日付を取得する方法は?
-
[解決済み] Ruby on Railsで、DateTime、Timestamp、Time、Dateの違いは何ですか?
-
[解決済み】JavaScriptで現在の日付と時刻を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】'cout'は型名ではない
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】デバッグアサーションに失敗しました