C++の日付と日、月、年の変数を持つ の日付を比較するにはどうすればいいですか?すなわち、イベントから30日が経過したことを確認する方法に。私は個人的には、同じ年に2つの日付を比較すると、年のすべての月の日数を保持し、日付を日に変換して、必要な計算を行う配列を使用して、両方の日付を「日 - 日付」にします。日付を比較する簡単な方法はありますか?C++で日付を比較する方法
答えて
ここには非常に良いC++11/14 library for handling dates です。それは{year, month, day}
構造(date::year_month_day
と呼ばれる)と{count-of-days}
構造(sys_days
と呼ばれる)を持つことができます。また、これら2つの構造間の変換を簡単かつ効率的に行うことができます。当然、比較演算子があります。
ライブラリ全体は基本的に<chrono>
のカレンダータイプの拡張です。
ビデオの導入は、こちらをご覧ください:
https://www.youtube.com/watch?v=tzyGjOm8AKo
は{year, month, day}
構造と{count-of-days}
構造との間で変換するための基礎となるアルゴリズムの詳細な説明である:
http://howardhinnant.github.io/date_algorithms.html
ここフィールド(year_month_day
)とシリアルの両方のためのいくつかの日付の作成及び比較例は、(ありますsys_days
)データ構造:
#include "date.h"
int
main()
{
using namespace date::literals;
// create and compare {year, month, day} structures
constexpr auto ymd1 = 2017_y/jan/21;
constexpr auto ymd2 = ymd1 + date::months{15};
static_assert(ymd2 > ymd1, "ymd2 is 15 months after ymd1");
static_assert(ymd2 == 2018_y/apr/21, "ymd2 is 2018-04-21");
// create and compare {count_of_days} structures
constexpr date::sys_days sd2 = ymd2;
static_assert(sd2 == ymd2, "sd2 is the same day as ymd2");
static_assert(sd2.time_since_epoch().count() == 17642, "sd2 is day 17642");
constexpr date::sys_days sd1 = sd2 - date::days{465};
static_assert(sd1 < sd2, "sd1 is 465 days before sd2");
static_assert(sd1.time_since_epoch().count() == 17177, "sd1 is day 17177");
static_assert(sd1 == 2017_y/jan/11, "sd1 is 2017-01-11");
}
constexpr
/static_assert
requir完全準拠のC++ 14コンパイラです。 C++ 11の場合は、constexpr
を削除し、static_assert
をassert
に変更してください(そしてstatic_assert
メッセージを削除してください)。
date::sys_days
はchrono::time_point
のtypedefである:
time_point<system_clock, duration<int, ratio<86400>>
上記の例のコードのみ"date.h"
を必要とせず、他のC++ソースファイル(NOインストール)。 timezone library at this same github locationもありますが、インストールする必要があります。
私はこのライブラリの主な著者です。あなたが記述するものについては
それは非常に良いとしょうかん。あなたが書いたことを明示的に開示せずに、あなた自身の図書館を「非常に良い図書館」として紹介しているように感じているかどうかはわかりません。 –
多くの人が時間がたつにつれて寄与しています:https://github.com/HowardHinnant/date/graphs/contributors :-)私はそれを自分で持ち運びができないでしょう。はい、私は主な著者です。 James Beachは昨日それをVS-2017に移植しました。 –
あなたの答えの最初の文章を微妙に微調整してもいいかもしれません:) –
、標準のCスタイルのルーチンは、おそらく最高の仕事に行くされています。ここではhttp://en.cppreference.com/w/cpp/chrono/c
これは標準であり、至る所で動作します
#include <ctime>
const int SECONDS_PER_DAY = 24 * 60 * 60;
tm day1;
memset(&day1, 0, sizeof(day1));
day1.tm_year = 2016 - 1900; // tm_year is the years since 1900
// so to represent 2016, the value is 116.
day1.tm_mon = 0;
day1.tm_mday = 20;
time_t day1a = mktime(&day1);
tm day2;
memset(&day2, 0, sizeof(day2));
day1.tm_year = 2008 - 1900;
day1.tm_mon = 0;
day1.tm_mday = 20;
time_t day2a = mktime(&day2);
double day_delta = difftime(day1, day2); // returns number of seconds
double days_past = (day_delta/SECONDS_PER_DAY)
コーディングCスタイルを使用してラフな例です。 。
N.B.POSIX標準ではtime_t
が整数型として定義されています
これは最近私のチームでコードレビューに合格していない可能性があります。また、私が知っている限り、うるう秒を考慮していません(ただし、他の人間のタイミングの不思議さを認識する必要があります)。 –
私はコードレビューにも合格しません。私が言ったように、それは一般的な使い方を示し、彼を 'tm'、' mktime() '、' time_t'などに紹介するのは大まかな例です。彼は経過日数を尋ねている。私は彼がそれを数秒で測ることを気にかけているとは思っていないので、うるう秒はそれに遊びません。 –
それは86400の後になります^ _ ^私はあなたが自分の仕事で拒否する解決策を推薦する答えを書いた理由について興味があります。まぁ。 –
自分で実装する必要がある場合は、最も簡単な方法は日付を単一の整数として保持することです - Julian day記事の計算ではJulian dayバックはかなり些細なことです(コンピュータの観点から)。日付を1つの数字にしておくと、日数の差を計算したり比較したりするのは簡単です。または、それが既に構造体として実装されていると言う場合、あなたはその日のユリウス日に日付を変換することができます(またはその値をキャッシュするために変更可能なフィールドを保持します)。
- 1. 日付比較の方法
- 2. 日付をC++で比較する
- 3. Cで日付を比較する方法#
- 4. Visual C++:日付の比較
- 5. linqの日付を比較する方法C#
- 6. 日付とテキストボックスの日付をASP.NETのデータベースで日付と比較するC#
- 7. 比較日付
- 8. XSLTの日付比較方法
- 9. 日付と日時をdoctrineと比較する方法
- 10. 日付と日付を比較した結果の比較
- 11. C++ - 現在のシステム日付と日付を比較します。
- 12. フィールドアクセスルールで日付フィールドと現在の日付を比較する方法[odoo 10]
- 13. groovyで現在の日付と日付を比較する方法
- 14. 今日の日付とPHPデータベースの日付を比較する方法
- 15. PL/SQL procで日付を比較する方法
- 16. powershell v2.0で2つのカスタム日付を比較する方法
- 17. ログスタッシュで日付を比較する方法
- 18. ミュールESBで日付を比較する方法
- 19. realm androidのクエリの間で日付を比較する方法
- 20. 複数の日付をSQLで比較する方法
- 21. Mongoクエリで日付を比較する方法
- 22. pythonコードでpeeweeの日付を比較する方法
- 23. LINQでのみ日付値を比較する方法
- 24. 日付比較Linq
- 25. 日付の比較
- 26. 比較日付は
- 27. 日付比較javascript
- 28. Codeigniter日付比較
- 29. 今日の日付比較
- 30. Excelでの日付比較
['std :: tie'](http://en.cppreference.com/w/cpp/utility/tuple/tie)は役に立ちます – NathanOliver
期間を確認している場合は、単一の日付番号に変換されます。おそらく最も人気が高いのは、1970年1月1日からの経過秒数である[Unix time](https://en.wikipedia.org/wiki/Unix_time)です。利用可能なライブラリが何をサポートしているかを知りたいかもしれません。 –
あなたはどの日時ライブラリを使用していますか?あなたは解決策を研究しましたか? –