概要
「c++で、明日とか昨日とか指定した日付を取得したい…。」
この記事は、そんなあなたに向けて書かれた記事です。
 是非最後までお読みいただけると嬉しいです。
現在時刻の取得
time_t now = std::time(nullptr);
まず、一番基本形です。
 time関数にnullptrを渡すと、1970年1月1日からの経過秒がtime_t型変数で返ってきます。
 ちなみにtime_tは、longのエイリアスです。
指定日付の取得
struct tm birthdayStruct = { 0, 23, 13, 3, 10, 1987 };
time_t birthday = std::mktime(&birthdayStruct);
さて、1行目にtm構造体が出て来ました。
 これは暦時刻の要素を格納する構造体です。
// time.h
struct tm {
	int	tm_sec;	      /* seconds after the minute [0-60] */
	int	tm_min;	      /* minutes after the hour [0-59] */
	int	tm_hour;      /* hours since midnight [0-23] */
	int	tm_mday;      /* day of the month [1-31] */
	int	tm_mon;	      /* months since January [0-11] */
	int	tm_year;	      /* years since 1900 */
	int	tm_wday;      /* days since Sunday [0-6] */
	int	tm_yday;      /* days since January 1 [0-365] */
	int	tm_isdst;     /* Daylight Savings Time flag */
	long	 tm_gmtoff; /* offset from CUT in seconds */
	char	* tm_zone;  /* timezone abbreviation */
};
この構造体にアクセスすることで、具体的な年月日などを取得出来ます。
 ここでは時間指定をしてtm構造体を作成しています。
 { 秒, 分, 時, 日, 月, 年 }
の順で指定しています。
 ここでは、1987年10月3日 13時23分0秒を表すtm構造体が返ってきます。
 最後に、この構造体のポインタをstd::mktime関数に渡してやることでtime_t型で返ってきます。
明日/昨日の取得
※ここで言う明日/昨日とは0時ジャストを考えてください。
time_t now = std::time(nullptr);
struct tm* localNow = std::localtime(&now);
struct tm tomorrowStruct = { 0, 0, 0, localNow->tm_mday + 1, localNow->tm_mon, localNow->tm_year };
time_t tomorrow = std::mktime(&tomorrowStruct);
2行めのlocaltimeはtime_t型ポインタを渡すと、現地時間のtm構造体のポインタを返してくれる関数です。
先ほどのtm構造体の作り方で明日の0時0分0秒を作成したいのでday + 1としています。
 昨日であれば、day – 1としてやれば出来ます。
 簡単ですね。誰かのお役に立てば。
Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!


【cocos2d-x】cocos記事一覧
 cocos記事一覧 Pimpl 激震が走った、Pimplイディオム enum enum struct(class)とは cast 決定版!*_castまとめ sqlit...



コメント