【问题标题】:Implementation code for GetDateFormat Win32 functionGetDateFormat Win32函数的实现代码
【发布时间】:2010-05-28 01:03:43
【问题描述】:

我正在将一些遗留代码从 Windows 移植到 Linux(确切地说是 Ubuntu Karmic)。

我遇到了一个 Win32 函数 GetDateFormat()。

我需要移植的语句是这样调用的:

GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", 'January', 31);

OR

GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", 'May', 30);

其中 datetime 是一个 SYSTEMTIME 结构。

有谁知道我可以从哪里获得该函数的代码 - 或者如果没有,关于如何“滚动我自己的”等效函数的提示?

【问题讨论】:

    标签: c datetime winapi ubuntu date


    【解决方案1】:

    调用GetDateFormat 的Linux 等效项(实际上是普通的ANSI C)如下:

    GetDateFormat(LOCALE_USER_DEFAULT, 0, &datetime, "MMMM", date_str, len);
    

    是:

    char *old_lc_time;
    
    /* Set LC_TIME locale to user default */
    old_lc_time = setlocale(LC_TIME, NULL);
    setlocale(LC_TIME, "");
    
    strftime(date_str, len, "%B", &datetime);
    
    /* Set LC_TIME locale back */
    setlocale(LC_TIME, old_lc_time);
    

    (其中datetime 现在是struct tm 而不是SYSTEMTIME

    您可能无需担心每次设置区域设置并将其重新设置 - 如果您对在用户默认区域设置中完成所有日期/时间格式感到满意(即通常),然后您可以在程序启动时调用一次setlocale(LC_TIME, "");并完成它。

    但是请注意,您的代码在lpDateStrcchDate 参数(分别为倒数第二个和倒数第二个)中传递给GetDateFormat 的值确实有意义。 'January' 是一个字符常量,它应该是一个指向缓冲区的指针,GetDateFormat 将在其中放置其结果。

    【讨论】:

      【解决方案2】:

      Win32 GetDateFormat 函数应该等同于 time.h 标头中的 strftime 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 2018-01-20
        相关资源
        最近更新 更多