如何确定哪一天是在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
如何确定哪一天是在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
我错了,我的第一篇文章,和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配置库。
啊,他们有相当广泛的例子打印日历 ,如果你可能会感兴趣。
用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
为好。