Windows では GetSystemTime 関数や GetLocalTime 関数など、 便利な API で簡単に現在日時を取得できます。
Android ネイティブアプリでは Windows API のようなものは使用できませんので、C/C++ で行う必要があります。 clock_gettime 関数で時刻を取得できますが、多少の計算をしなくてはいけませんので、 そのあたりを検討しています。
このページ、および開発関連ページは、PC 向けデザインとなっております。 画面サイズの小さいスマホでは、快適な表示が得られませんので、ご了承ください。
ご利用に際しては、必ずプライバシーポリシー(免責事項等)をご参照ください。
また、本サイトが初めての方は、まずこのページの注意事項をご覧ください。
投稿 December 25, 2017, 最終更新 November 27, 2019(様式変更)
Windows API では GetLocalTime 関数で、SYSTEMTIME 構造体に、現在日時を取得できます。
SYSTEMTIME st; GetLocalTime(&st);
typedef struct _SYSTEMTIME { WORD wYear; // 西暦年 WORD wMonth; // 月(1〜12) WORD wDayOfWeek; // 曜日(0:日曜〜6:土曜) WORD wDay; // 日(1〜31) WORD wHour; // 時(0〜23) WORD wMinute; // 分(0〜59) WORD wSecond; // 秒(0〜59) WORD wMilliseconds; // ミリ秒(0〜999) } SYSTEMTIME, *PSYSTEMTIME;
C/C++ では、clock_gettime 関数に CLOCK_REALTIME を渡せば、日時情報を取得できます。
取得できるのは秒と
設定されるのは標準時データのため、localtime_r 関数で、ローカルタイム(現地時間)に変換する必要があります。 変換先は、tm 構造体ですが、tm_year は 1900 年からの年数だったり、tm_mon は1月からの月数(0〜11)だったりします。
私は、新しく
typedef struct tagmxDateTime { int16_t year; // 年 int16_t month; // 月(1〜12) int16_t day; // 日(1〜31) int16_t hour; // 時(0〜23) int16_t min; // 分(0〜59) int16_t sec; // 秒(0〜59) int16_t msec; // ミリ秒(0〜999) int16_t wday; // 曜日(0:日曜〜6:土曜) int16_t yday; // 1年のうちの日(0〜365) } SmxDateTime, *PSmxDateTime;
Windows のものと比べて、yday が追加されたもの、ということになります。 現在日時を取得する関数として、SmxDateTime 構造体への参照を引数とするものにまとめました。
void getLocalTime(SmxDateTime& dt);
timespec ts; clock_gettime(CLOCK_REALTIME, &ts); time_t t = ts.tv_sec; tm tmv; localtime_r(&t, &tmv); dt.year = tmv.tm_year + 1900; // 西暦年(そのものに変換) dt.month = tmv.tm_mon + 1; // 月(1〜12に変換) dt.day = tmv.tm_mday; // 日(1〜31) dt.hour = tmv.tm_hour; // 時(0〜23) dt.min = tmv.tm_min; // 分(0〜59) dt.sec = tmv.tm_sec; // 秒(0〜61) dt.msec = (int16_t)(ts.tv_nsec / 1000000); // ミリ秒(0〜999) dt.wday = tmv.tm_wday; // 曜日(0:日曜〜6:土曜) dt.yday = tmv.tm_yday; // 1年のうちの日(0〜365)
tmv.tm_sec は、最大2秒の
コンピューターシステムに影響があるため、うるう秒を廃止しいようとする動きがあるようです。
ログファイルの記述の際に、出力した時分秒ミリ秒を追加するときや、何日連続プレー(アプリ起動)しているかの判定に使っています。
投稿 December 25, 2017, 最終更新 July 23, 2018(様式変更)
Visual Studio 2015 でプロジェクトを開いているとき、「プロジェクト」メニューの一番下、「<プロジェクト名>.NativeActivity のプロパティ」で、STLport を選択しています。
C/C++ で、ログファイルを出力する方法について、書いています。
C/C++ で、MFC の CString を代用する、最低限欲しかった機能を持ったクラスを作成しました。
C/C++ で数値3桁ごとにカンマを入れる方法を検討しています。
Android のアプリ開発に関する記事をまとめた Android 開発トップ もご覧ください。