ぴぐノート

Good code is its own best documentation.

Boost C/C++

【Boost】Boostライブラリの日付を使ってみよう!

投稿日:2017年7月9日 更新日:

先日の記事でBoostをインストールできたのでBoostのライブラリを使って遊んでみましょう。
今回は日付に関する情報をBoostから取得・表示したり、〇月〇日~□月□日が何日間あるか(期間)取得してみましょう。

日付を利用するには gregorian.hpplibboost_date_time.lib が必要です。
ヘッダーファイルと静的ライブラリの生成についてはこちらの記事を確認してみて下さいネ。

何が必要なのか確認しよう!

では具体的にBoostの日付を利用するためにはどのファイルが必要になるのでしょうか。

ライブラリ(debug版) libboost_date_time-vc141-mt-gd-1_64.lib
ライブラリ(Release版) libboost_date_time-vc141-mt-1_64.lib
ヘッダーファイル boost/date_time/gregorian/gregorian.hpp

** ビルド時の環境によってライブラリファイル名が異なります
** 私のビルド時はVisual Studio 2017環境だったため、”vc141″が含まれています

サンプルプログラムを作ってみよう!

先にサンプルプログラムを見て実際にプログラムを作ってみましょう。

** サンプルプログラムでは名前空間をすべて記述していますが、実際に利用する場合は using namespace を使って少しでも見やすくなるようにした方が良さそうです。
** もちろん名前の競合には気を付けてくださいネ。

どんな場合に使えるか考えてみる!

うーん、出力するファイル名に付与して日ごとのファイル管理などにも使えるでしょうか。

他にも処理日と処理内容をリスト化して表示する場合などで日付を扱いたくなる場合もありそうですネ。
この場合だと処理日から〇日間経過したら自動的に削除するなどで期間の計算なども必要になりそうです。

MFCなどで同じことをする場合は、CTimeクラスを使って日付を取得したり、CTime::Format関数でCString型を取得する感じになるでしょうか?

CTimeとboost::gregorian::date、どっちが早い?

そもそもCTimeは時刻もデータとして持っているので、boost::gregorian::dateの方が速そうな感じがします。
ざっくりしたテキトーなコードで確認してみます。

  1回目(ナノ秒) 2回目 3回目 4回目 5回目 平均
CTime(loop:1) 521,600 9,900 19,600 7,000 6,400 112,900
boost(loop:1) 73,700 21,500 18,000 13,800 13,100 28,020
CTime(loop:1,000) 901,900 484,700 483,900 489,100 483,800 568,680
boost(loop:1,000) 2,558,600 2,488,000 2,604,400 2,484,900 2,495,000 2,526,180

最適化の関係なのかCTimeでは初回に時間がかかりますが、その後は圧倒的に早いですね。
boost::gregorian::dateは1回ごとの速度に大きな差がないですが、比較すると遅く見えます。

ただし、今日の日付を1,000回確認するなんてことは実際にはないはずで、1度だけの確認で考えればboostの方が使いやすいように思います
環境依存が少ない点も考慮すればCTimeからboostへの置換も十分検討の余地がありそうですネ。

まとめ

アプリケーションを作るときに日付が!って悩むことは多くないですが、あるとちょっとだけ助かる場合は多いですよね。

単純に日付が欲しいだけであれば std::time を使った方が速度も早いですが日付を文字列に変換したり、文字列を日付に変換したり、期間を得たいといった場合はライブラリを使うと楽に操作できるかもしれませんネ。

スポンサーリンク

スポンサーリンク

-Boost, C/C++

執筆者:

関連記事

【OpenCV】OpenCVをビルドして画像処理をしてみよう!

今日はOpenCVを使って画像表示をしてみたいと思います。 ツールやアプリケーションを作る場合、多かれ少なかれ画像処理は必要になってくるのではないでしょうか。 また画像処理関係ではまると泥沼化する場合 …

【Boost】boost::property_treeの例外処理を考えよう!

ライブラリなどを使用していると、「使い方は大体分かった!使ってみよう!」とすると微妙にはまってしまうことがあります。 前回・前々回でお話しした文字コードもその一つですが今回は例外処理について考えてみま …

Eclipse NeonとCDT/MinGWでC++開発環境を作成しよう!(1)

MFCなどを利用する場合にはほぼVisualStudio一択ですが、簡単なコンソールアプリケーションを作る場合にはEclipseのほうが便利な場合も多いです。 特に「普段はJavaで開発を行っているけ …

【MFC】マルチスレッドでプログレスバーを実装しよう その2

昨日に続き、プログレスバーをマルチスレッドを用いて実装してみましょう。 作成の目的は、 スレッド実行中はモーダルダイアログを表示させること。 モーダルダイアログではプログレスバーを表示し進捗が分かるこ …

【Boost】オープンソースライブラリBoostをインストールしよう

普段からC++でのプログラムを作成していてBoost(ブースト)を知らないという人はあまり多くないかもしれませんが、「実はまだ使ったことない…」という人もいるのではないでしょうか? ライブ …