如何确定哪些天是用C当前区域在本周前(How to determine which day is t

2019-06-26 03:54发布

如何确定哪一天是在C.当前区域在俄罗斯周一在本周前是第一天,但​​我的Mac显示了错误的第一天本地化的日历。 所以我想如果我能确定这一天是在当前区域之首。 谢谢。

anatoly@mb:/Users/anatoly$ cal
     Июля 2012
вс пн вт ср чт пт сб
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Answer 1:

我错了,我的第一篇文章,和ICU提供一个C API。

所以,如果在该库的依赖是你可以接受的,您可以使用便携下面的代码片段获得了第一周的:

#include <stdio.h>

/* for calendar functions */
#include <unicode/ucal.h>
/* for u_cleanup() */
#include <unicode/uclean.h>
/* for uloc_getDefault() */
#include <unicode/uloc.h>

int main()
{
    /* it *has* to be pre-set */
    UErrorCode err = U_ZERO_ERROR;

    UCalendar* cal = ucal_open(
            0, -1, /* default timezone */
            uloc_getDefault(), /* default (current) locale */
            UCAL_DEFAULT, /* default calendar type */
            &err);

    if (!cal)
    {
        fprintf(stderr, "ICU error: %s\n", u_errorName(err));
        u_cleanup();
        return 1;
    }

    /* 1 for sunday, 2 for monday, etc. */
    printf("%d\n", ucal_getAttribute(cal, UCAL_FIRST_DAY_OF_WEEK));

    ucal_close(cal);
    u_cleanup();
    return 0;
}

然后你用链接程序icu-i18n pkg配置库。

啊,他们有相当广泛的例子打印日历 ,如果你可能会感兴趣。



Answer 2:

用glibc,你可以这样做:

#define _GNU_SOURCE
#include <langinfo.h>

char get_first_weekday()
{
    return *nl_langinfo(_NL_TIME_FIRST_WEEKDAY);
}

记得拨打setlocale()第一。 例:

#include <stdio.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL, "");
    printf("%d\n", get_first_weekday());
    return 0;
}

这将返回2我的系统上(这意味着星期一== DAY_2 )。

只是注意:我不认为这是glibc的公共API。 然而,这是多么locale工具捆绑在它得到第一个工作日。 cal使用类似的方法为好。

根据特定的用途,你可能有兴趣在_NL_TIME_FIRST_WORKDAY为好。



文章来源: How to determine which day is the first in week in current locale in C
标签: c date time locale