0
0

【POCO Tips】C++ POCOライブラリでISO8601拡張形式のローカル時刻を取得する方法

Last updated at Posted at 2024-09-23

はじめに

 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ライブラリを活用することで、少ないコードで時刻変換を実現できた。

参考

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0