如何开始星期几?

时间:2016-09-05 06:52:06

标签: c++ date

我已经在控制面板(Windows 7)中的区域和本地设置中调整了一周的第一天,现在我正在编写一个C ++函数,它必须返回我调整过的第一天的第一天。 我可以使用任何Windows API或标准c ++函数吗?

由于 enter image description here

2 个答案:

答案 0 :(得分:3)

(抱歉我写的完全错了。我已经更新了帖子。)

正确使用的功能是EnumCalendarInfoExEx

#include <Windows.h>
#include <strsafe.h>
#include <iostream>

using namespace std;

BOOL CALLBACK EnumCalendarInfoProcExEx(LPWSTR lpszInfo, CALID calendar, LPWSTR lpReserved, LPARAM lParam)
{
    StringCchCopy(reinterpret_cast<LPWSTR>(lParam), 64, lpszInfo);
    return FALSE;
}

int main()
{
    WCHAR szDay[64];
    BOOL bResult = ::EnumCalendarInfoExEx(
        &EnumCalendarInfoProcExEx,
        LOCALE_NAME_USER_DEFAULT,
        ENUM_ALL_CALENDARS,
        nullptr,
        CAL_SDAYNAME1,
        reinterpret_cast<LPARAM>(szDay)
        );

    if (!bResult)
    {
        wcout << L"Error" << endl;
        return 0;
    }

    wcout << szDay << endl;
    return 0;
}

需要注意的几件事情:

  • 即使我的电脑上的控制面板中将一周的第一天配置为星期日,也会在星期一返回......
  • 显然,用户的区域设置可能有多个日历。以上代码仅获取第一个日历的第一天。

答案 1 :(得分:0)

我尝试使用GetLocaleInfoEx Windows API并且运行良好:)

int GetSystemStartDayOfWeek()
{
    int   ret;
    DWORD StartDayOfWeek;

    ret = GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT,
        LOCALE_IFIRSTDAYOFWEEK | LOCALE_RETURN_NUMBER,
        (LPTSTR)&StartDayOfWeek,
        sizeof(StartDayOfWeek) / sizeof(TCHAR));

    return StartDayOfWeek;
}