C++(MFC) 簡易ザラ場判定関数

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