C _tzset和x字母时区名称

C _tzset和x字母时区名称,c,timezone,C,Timezone,在C语言中,如何使用以下格式设置圣皮埃尔和米奎隆(PMST3PMDT)的时区: set TZ=tzn[+ | –]hh[:mm[:ss] ][dzn] 如果您查看的文档,您可以阅读: tzn 三个字母的时区名称,如PST。必须指定从本地时间到UTC的正确偏移量 4个字母(PMDT)或5个字母(EASST)的时区名称如何? 以下是所有时区缩写的列表: 下面是我用C语言编写的简单代码,用于测试_tzset: #include <stdio.h> #include <stdlib.

在C语言中,如何使用以下格式设置圣皮埃尔和米奎隆(PMST3PMDT)的时区:

set TZ=tzn[+ | –]hh[:mm[:ss] ][dzn]
如果您查看的文档,您可以阅读:

tzn

三个字母的时区名称,如PST。必须指定从本地时间到UTC的正确偏移量

4个字母(PMDT)或5个字母(EASST)的时区名称如何? 以下是所有时区缩写的列表:

下面是我用C语言编写的简单代码,用于测试_tzset:

#include <stdio.h>
#include <stdlib.h>
#include <sys/timeb.h>
#include <time.h>
//add _CRT_SECURE_NO_WARNINGS in the project properties "preprocessor definitions"

int main(int argc, char* argv[])
{
    time_t t;
    struct tm * now;

    _putenv("TZ=PST8PDT"); // for pacific standard time, there is no problem
     _tzset();

    t = time(0);
    now = localtime( & t );
    printf("time: %d:%d \nisdst:%d\n", now->tm_hour, now->tm_min, now->tm_isdst);
    printf("_daylight=%d\n", _daylight);
    printf( "_timezone=%d\n", _timezone);
    printf( "_tzname[0]=%s\n", _tzname[0]);
    printf( "_tzname[1]=%s\n", _tzname[1]);

    return 0;
}
#包括
#包括
#包括
#包括
//在项目属性“预处理器定义”中添加“CRT\u SECURE\u NO\u警告”
int main(int argc,char*argv[])
{
时间;
结构tm*现在;
_putenv(“TZ=PST8PDT”);//对于太平洋标准时间,没有问题
_tzset();
t=时间(0);
现在=本地时间(&t);
printf(“时间:%d:%d\nisdst:%d\n”,现在->tm_小时,现在->tm_分钟,现在->tm_isdst);
printf(“\u daylight=%d\n”,\u daylight);
printf(“\u时区=%d\n”,\u时区);
printf(“\u tzname[0]=%s\n”,\u tzname[0]);
printf(“\u tzname[1]=%s\n”,\u tzname[1]);
返回0;
}

*我正在使用windows8,visual studio 2012,从Ubuntu上的时区数据库中可以看到:

/usr/share/zoneinfo/zone.tab
您要使用的时区名为
America/Miquelon

因此,您希望这样做:

setenv("TZ", "America/Miquelon", 1);
tzset();
迫使时区到达圣皮埃尔和米奎隆


我不知道这在微软Windows下是否有效,不过…

只有在Windows上,标准函数才会获得
\ucode>前缀。POSIX说,std和dst表示标准(std)或替代(dst-如夏令时)时区的名称不少于三个字节,也不超过{TZNAME_MAX}。只需要std;如果缺少dst,则替代时间不适用于此区域设置。POSIX还要求
TZNAME\u MAX
至少为6(
)。如果微软在这个问题上不遵守(当前版本的)POSIX,你很可能不得不向他们提出这个问题——最好的英国人!谢谢你的留言。我在网上发布了同样的问题,但我想我永远都不会有答案