我在第一篇文章中错了,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-config 库链接。
啊,如果你有兴趣的话,他们有一个相当广泛的打印日历的例子。