現在の日付と時刻を取得する
現在の日付と時刻を取得するには、 SFXDate::CurrentDate 関数を使用します。
SFXDate date; date = SFXDate::CurrentDate(); // 現在の日付と時刻を取得する
C++ で作成されたBREW アプリで、時刻・日付・時間の処理を行う方法です。
SophiaFramework を用いています。
現在の日付と時刻を取得するには、 SFXDate::CurrentDate 関数を使用します。
SFXDate date; date = SFXDate::CurrentDate(); // 現在の日付と時刻を取得する
バージョン 4.0 以降
ファイルの作成日を取得するには、SFXFile::GetCreateDate 関数を使用します。
SFXDate date; SFXFile::GetCreateDate(SFXPath("/data/data1.txt"), &date);
バージョン 3.0
ファイルの作成日を取得するには、SFBFileMgr::GetInfo 関数を使用します。
SFBFileMgrSmp fileMgr = SFBFileMgr::NewInstance(); FileInfo info = {0}; fileMgr->GetInfo("/data/data1.txt", &info); // ファイルの情報を取得する // ファイル作成日(1980 年1 月6 日00:00:00 グリニッジ標準時からの経過時間) UInt32 fileTime = info.dwCreationDate; SFXDate date(info.dwCreationDate); // SFXDate 形式に変換
参照 SFXFile::GetCreateDate | SFBFileMgr::NewInstance | SFBFileMgr::GetInfo
SFXDate::CurrentDate 関数で取得できる時刻は秒単位です。
時間をミリ秒単位で取得するには、SFXHelper::gettimems を使用します。
UInt32 startms = SFXHelper::gettimems(); func(); // 測定したい処理 UInt32 endms = SFXHelper::gettimems(); SInt32 milisecTime = endms - startms; // milisecTime は // 測定した時間(ミリ秒単位)
SFXDate クラスの日時データをエクスポートし、そのエクスポートしたデータを
インポートしたい場合があります。
例えば、日時データをファイルに保存し、読み込みたい場合です。
このときは、SFXDate::AsUInt32 関数で秒に出力するのが簡単です。
// SFXDate クラスを外部にエクスポートする SFXDate date1(2008, 10, 12, 23, 45, 58); // 2008年10月12日 23時45分58秒 SFXAnsiString str = SFXAnsiString::Format("%u", date1.AsUInt32()); // str = "907890358" となる // エクスポートしたデータをインポートする SFXDate date2(str.AsUInt32()); //date2 は 2008年10月12日 23時45分58秒 になる
日時の比較には、<, >, ==, !=, <=, >= 演算子を使用するか、
SFXDate::Compare 関数を使用します。
SFXDate date1(2008, 10, 12, 23, 45, 58); // 2008年10月12日 23時45分58秒 SFXDate date2(2009, 10, 12, 23, 45, 58); // 2009年10月12日 23時45分58秒 SFXDate date3(2009, 10, 12, 23, 45, 58); // 2009年10月12日 23時45分58秒 // date1 は最も過去、date2 と date3 は同じ日時 date1 < date2 // true date2 > date3 // false date1 == date2 // false date1 != date2 // true date2 <= date3 // true SInt16 c = date1.Compare(date2); if (c > 0) { // date1 が date2 より未来なら } else if (c < 0) { // date1 が date2 より過去なら } else { // date1 と date2 が同じなら }
参照 SFXDate::operator< | SFXDate::operator> | SFXDate::operator== |
SFXDate::operator!= | SFXDate::operator<= | SFXDate::Compare
ある日時からある期間経過した後(前)の日時を求めるには、
SFXDate::Add* 関数、SFXDate::Sub* 関数を使用します。
加算
SFXDateDuration dateDuration(40); // 40秒 SFXDate date1(2008, 10, 12, 23, 45, 10); // 2008年10月12日 23時45分10秒 date1.Add(dateDuration); // + 40秒 2008年10月12日 23時45分50秒 date1.AddYear(3); // + 3年 2011年10月12日 23時45分50秒 date1.AddMonth(25); // + 25月 2013年11月12日 23時45分50秒 date1.AddDay(100); // + 100日 2014年 2月20日 23時45分50秒 date1.AddHour(50); // + 50時間 2014年 2月23日 1時45分50秒 date1.AddMinute(15); // + 15分 2014年 2月23日 2時 0分50秒 date1.AddSecond(1000); // +1000秒 2014年 2月23日 2時17分30秒
減算
SFXDateDuration dateDuration(40); // 40秒 SFXDate date2(2008, 10, 12, 23, 45, 10); // 2008年10月12日 23時45分10秒 date2.Sub(dateDuration); // - 40秒 2008年10月12日 23時44分30秒 date2.SubYear(3); // - 3年 2005年10月12日 23時44分30秒 date2.SubMonth(25); // - 25月 2003年 9月12日 23時44分30秒 date2.SubDay(100); // - 100日 2003年 6月 4日 23時44分30秒 date2.SubHour(50); // - 50時間 2003年 6月 2日 21時44分30秒 date2.SubMinute(15); // - 15分 2003年 6月 2日 21時29分30秒 date2.SubSecond(1000); // -1000秒 2003年 6月 2日 21時12分50秒
参照 SFXDate::Add | SFXDate::AddYear | SFXDate::AddMonth | SFXDate::AddDay |
SFXDate::AddHour | SFXDate::AddMinute | SFXDate::AddSecond |
SFXDate::Sub | SFXDate::SubYear | SFXDate::SubMonth | SFXDate::SubDay |
SFXDate::SubHour | SFXDate::SubMinute | SFXDate::SubSecond
2つの日時の期間(差)を求めるには、- 演算子を使用します。
返り値は SFXDateDuration 型となります。
SFXDate date1(2005, 12, 15, 13, 20, 30); // 2005年12月15日 13時20分30秒 SFXDate date2(2008, 10, 12, 23, 45, 58); // 2008年10月12日 23時45分58秒 SFXDateDuration dateDuration(date2 - date1); SInt64 n1 = dateDuration.AsSInt64(); // n1 = 89202328 (単位は秒) SInt64 n2 = (date1 - date2).AsSInt64(); // n2 = -89202328
SFXDate::DurationTo 関数でも同じ結果が得られます。
参照 SFXDate::operator- | SFXDateDuration::AsSInt64 | SFXDate::DurationTo
日時を書式出力するには SFXDate::Format 関数を使用します。
SFXDate date(2008, 10, 12, 23, 45, 58); // 2008年10月12日 23時45分58秒 SFXAnsiString str = date.Format("YYYY/MM/DD hh:mm:ss Wek"); // str = "2008/10/12 23:45:58 Sun" となる
日付クラスから値を取得するには SFXDate::Get* 関数を使用します。
SFXDate date1(2008, 10, 12, // 2008年10月12日 23時45分58秒 23, 45, 58); UInt16 year = date1.GetYear(); //年 year = 2008 UInt16 month = date1.GetMonth(); //月 month = 10 UInt16 day = date1.GetDay(); //日 day = 12 UInt16 hour = date1.GetHour(); //時 hour = 23 UInt16 minute = date1.GetMinute(); //分 minute = 45 UInt16 second = date1.GetSecond(); //秒 second = 58 DayOfWeekEnum dayOfWeek = date1.GetDayOfWeek(); //曜日 dayOfWeek = DAYOFWEEK_SUNDAY UInt32 time = date1.AsUInt32(); //1980年1月6日 0時0分0秒 から経過した秒数 //time = 907890358
曜日については「ある日付の曜日を取得する」を参照してください。
参照 SFXDate::GetYear | SFXDate::GetMonth | SFXDate::GetDay |
SFXDate::GetHour | SFXDate::GetMinute | SFXDate::GetSecond |
SFXDate::GetDayOfWeek
日付クラスに日時をセットするには、以下の方法があります。
1. コンストラクタ
SFXDate date1; // 空の日時(不定) SFXDate date2(2008, 10, 12, 23, 45, 58); // 2008年10月12日 23時45分58秒 SFXDate date3(1995, 3, 15); // 1995年3月15日 0時0分0秒 // 1980年1月6日 0時0分0秒 から経過した秒数 // ここでは32500000秒経過した 1981年1月16日 3時46分40秒 となる SFXDate date4(32500000);
2. Set 関数
SFXDate date1, date2; date1.Set(2008, 10, 12, 23, 45, 58); // 2008年10月12日 23時45分58秒 date1.Set(1995, 3, 15); // 1995年3月15日 0時0分0秒 //(時、分、秒は0になることに注意) date1.Set(32500000); // 1981年1月16日 3時46分40秒 date2.Set(date1); // 日付クラスを渡すことも可能
3. Set* 関数
SFXDate date1(2008, 10, 12, // 2008年10月12日 23時45分58秒 23, 45, 58); date1.SetDate(1995, 1, 2); //年月日 1995年 1月 2日 23時45分58秒 date1.SetTime(3, 4, 56); //時分秒 1995年 1月 2日 3時 4分56秒 date1.SetYear(2030); //年 2030年 1月 2日 3時 4分56秒 date1.SetMonth(12); //月 2030年12月 2日 3時 4分56秒 date1.SetDay(15); //日 2030年12月15日 3時 4分56秒 date1.SetHour(13); //時 2030年12月15日 13時 4分56秒 date1.SetMinute(25); //分 2030年12月15日 13時25分56秒 date1.SetSecond(1); //秒 2030年12月15日 13時25分 1秒
参照 SFXDate::Set | SFXDate::SetDate | SFXDate::SetTime | SFXDate::SetYear |
SFXDate::SetMonth | SFXDate::SetDay | SFXDate::SetHour |
SFXDate::SetMinute | SFXDate::SetSecond
ある日付の曜日を取得するには、SFXDate::GetDayOfWeek 関数を使用します。
//year年month月day日の曜日を取得 SFXDate date(year, month, day); DayOfWeekEnum youbi = date.GetDayOfWeek(); // 曜日を取得する
DayOfWeekEnum は曜日を表すenum型で、次のように定義されています。
enum DayOfWeekEnum { DAYOFWEEK_MONDAY = 0, DAYOFWEEK_TUESDAY, DAYOFWEEK_WEDNESDAY, DAYOFWEEK_THURSDAY, DAYOFWEEK_FRIDAY, DAYOFWEEK_SATURDAY, DAYOFWEEK_SUNDAY };
使用例
static char* dayOfWeek[] = { "Mon", "Thu", "Wed", "Thr", "Fri", "Sat", "Sun"}; // 曜日文字列 SFXDate date1(2010, 1, 1); // 2010年1月1日は金曜日 SFXAnsiString str = dayOfWeek[ date1.GetDayOfWeek() ]); // str = "Fri"
現在日時を取得するには、SFXDate::CurrentDate 関数を使用します。
SFXDate date = SFXDate::CurrentDate(); // date に現在日時が代入される