#include <chrono> #include <ctime> #include <iomanip> #include <sstream> #include <string> #include <Windows.h> // 日本時間で営業時間内(9:00-15:30、土日を除く)かどうかを判定する関数 BOOL IsJapanMarketHours() { // 現在のUTC時間を取得 auto now = std::chrono::system_clock::now(); auto now_time_t = std::chrono::system_clock::to_time_t(now); // UTCの時間を構造体に変換 std::tm utc_tm; gmtime_s(&utc_tm, &now_time_t); // 日本時間に変換(UTC+9時間) std::tm jst_tm = utc_tm; jst_tm.tm_hour += 9; // 日付の繰り上げ処理 std::mktime(&jst_tm); // 曜日を取得(0=日曜日, 1=月曜日, ..., 6=土曜日) int dayOfWeek = jst_tm.tm_wday; // 土曜日(6)または日曜日(0)の場合はFALSEを返す if (dayOfWeek == 0 || dayOfWeek == 6) { return FALSE; } // 時間と分を取得 int hour = jst_tm.tm_hour; int minute = jst_tm.tm_min; // 現在の時刻を分単位に変換(9:00は540分、15:30は930分) int currentMinutes = hour * 60 + minute; // 9:00から15:30の間かどうかをチェック if (currentMinutes >= 540 && currentMinutes <= 930) { return TRUE; } return FALSE; } // 日本時間を文字列で取得する補助関数 std::wstring GetJapanTimeString() { // 現在のUTC時間を取得 auto now = std::chrono::system_clock::now(); auto now_time_t = std::chrono::system_clock::to_time_t(now); // UTCの時間を構造体に変換 std::tm utc_tm; gmtime_s(&utc_tm, &now_time_t); // 日本時間に変換(UTC+9時間) std::tm jst_tm = utc_tm; jst_tm.tm_hour += 9; // 日付の繰り上げ処理 std::mktime(&jst_tm); // 日本時間を文字列に変換 std::wstringstream wss; wss << std::put_time(&jst_tm, L"%Y-%m-%d %H:%M:%S JST"); return wss.str(); } // 使用例 void Example() { std::wstring japanTime = GetJapanTimeString(); std::wstring message; if (IsJapanMarketHours()) { message = L"現在は取引時間内です\n日本時間: " + japanTime; } else { message = L"現在は取引時間外です\n日本時間: " + japanTime; } MessageBox(NULL, message.c_str(), L"日本市場状態", MB_OK | MB_ICONINFORMATION); }