#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);
}