はじめに
C++のPOCOライブラリを使って、ISO8601拡張形式のローカル時刻を取得する方法を紹介する。
動作確認環境
- Ubuntu 20.04
- POCO 1.9.2
方法
2024/9/25追記: 本記事のコメントで簡潔な方法を教えて頂いたので方法1として追記修正します。
方法1 (推奨)
#include <iostream>
#include <string>
#include <Poco/Timestamp.h>
#include <Poco/DateTimeFormat.h>
#include <Poco/DateTimeFormatter.h>
int main() {
using namespace Poco;
using namespace std;
Timestamp now;
string s = DateTimeFormatter::format(LocalDateTime(now), DateTimeFormat::ISO8601_FORMAT);
cout << "Local time ISO 8601 extended = " << s << endl;
return 0;
}
方法2
方法1の方が簡潔なので推奨。方法2は記録として残しておく。結果は同じになる。
#include <string>
#include <Poco/Timestamp.h>
#include <Poco/Timezone.h>
#include <Poco/LocalDateTime.h>
#include <Poco/DateTimeFormatter.h>
int main()
{
// ローカル時刻とUTCとのオフセット時間を取得
// ※ローカル時刻は、ホストPCのタイムゾーンに従う (Ubuntuの場合は、echo $TZで確認可能)
int time_zone_offset_seconds = Poco::Timezone::utcOffset();
// オフセット時刻のフォーマット取得
std::string offset = Poco::DateTimeFormatter::tzdISO(time_zone_offset_seconds);
// 現時刻をローカル時刻に変換
// ※ローカル時刻は、ホストPCのタイムゾーンに従う (Ubuntuの場合は、echo $TZで確認可能)
Poco::Timestamp now;
Poco::LocalDateTime local_datetime{Poco::DateTime{now}};
// ローカル時刻をISO8601拡張形式に変換(例:2024-09-22T07:24:50+09:00)
std::string local_time_iso_extended = Poco::DateTimeFormatter::format(local_datetime, "%Y-%m-%dT%H:%M:%S") + offset;
std::cout << "Local time ISO 8601 extended = " << local_time_iso_extended << std::endl;
return 0;
}
結果例
Local time ISO 8601 extended = 2024-09-22T07:24:50+09:00
まとめ
C++のPOCOライブラリを使って、ISO8601拡張形式のローカル時刻を取得する方法を紹介した。POCOライブラリを活用することで、少ないコードで時刻変換を実現できた。
参考