c/c++中使用mktime时,有时候会返回-1错误,主要的原因是输入了非法值,下面是一些常用的示例

#include <bits/stdc++.h>
#include <ctime>
#include <cstdio>
using namespace std;
//g++ mktime.cpp -std=c++11 -o mktime
int main(int argc, char* argv[])
{
    cout<<"mktime example"<<endl;
    struct tm stm;
    stm.tm_sec = 0;
    stm.tm_min = 0;
    stm.tm_hour = 0;
    stm.tm_mday = 1;
    stm.tm_mon = 0;
    stm.tm_year = 70;
    time_t ret;
    setenv("TZ","Etc/GMT",1);
    tzset();
    ret = mktime(&stm);
    printf("Etc/GMT ret = %ld\n", ret);
    setenv("TZ","Europe/Berlin",1);
    tzset();
    ret = mktime(&stm);
    printf("UTC+01:00 ret = %ld\n", ret);
    setenv("TZ","Atlantic/Azores",1);
    tzset();
    ret = mktime(&stm);
    printf("UTC-01:00 ret = %ld\n", ret);
    setenv("TZ","Asia/Shanghai",1);
    tzset();
    ret = mktime(&stm);
    printf("Asia/Shanghai ret = %ld\n", ret);
}

编译,运行,结果

g++ mktime.cpp -std=c++11 -o mktime
./mktime
mktime example
Etc/GMT ret = 0
UTC+01:00 ret = -3600
UTC-01:00 ret = 3600
Asia/Shanghai ret = -28800
(UTC-12:00) 国际日期变更线西Etc/GMT+12
(UTC-11:00) 协调世界时-11Etc/GMT+11
(UTC-10:00) 夏威夷Pacific/Honolulu
(UTC-09:00) 安克雷奇America/Anchorage
(UTC-08:00) 下加利福尼亚州America/Santa_Isabel
(UTC-08:00) 太平洋时间(美国和加拿大)America/Los_Angeles
(UTC-07:00) 奇瓦瓦,拉巴斯,马萨特兰America/Chihuahua
(UTC-07:00) 亚利桑那America/Phoenix
(UTC-07:00) 山地时间(美国和加拿大)America/Denver
(UTC-06:00) 中美洲America/Guatemala
(UTC-06:00) 中部时间(美国和加拿大)America/Chicago
(UTC-06:00) 萨斯喀彻温America/Regina
(UTC-06:00) 瓜达拉哈拉,墨西哥城,蒙特雷America/Mexico_City
(UTC-05:00) 波哥大,利马,基多America/Bogota
(UTC-05:00) 印地安那州(东部)America/Indiana/Indianapolis
(UTC-05:00) 东部时间(美国和加拿大)America/New_York
(UTC-04:30) 加拉加斯America/Caracas
(UTC-04:00) 大西洋时间(加拿大)America/Halifax
(UTC-04:00) 亚松森America/Asuncion
(UTC-04:00) 乔治敦,拉巴斯,马瑙斯,圣胡安America/La_Paz
(UTC-04:00) 库亚巴America/Cuiaba
(UTC-04:00) 圣地亚哥America/Santiago
(UTC-03:30) 纽芬兰America/St_Johns
(UTC-03:00) 巴西利亚America/Sao_Paulo
(UTC-03:00) 格陵兰America/Godthab
(UTC-03:00) 卡宴,福塔雷萨America/Cayenne
(UTC-03:00) 布宜诺斯艾利斯America/Argentina/Buenos_Aires
(UTC-03:00) 蒙得维的亚America/Montevideo
(UTC-02:00) 协调世界时-2Etc/GMT+2
(UTC-01:00) 佛得角群岛Atlantic/Cape_Verde
(UTC-01:00) 亚速尔群岛Atlantic/Azores
(UTC+00:00) 卡萨布兰卡Africa/Casablanca
(UTC+00:00) 蒙罗维亚,雷克雅未克Atlantic/Reykjavik
(UTC+00:00) 都柏林,爱丁堡,里斯本,伦敦Europe/London
(UTC+00:00) 协调世界时Etc/GMT
(UTC+01:00) 阿姆斯特丹,柏林,伯尔尼,罗马,斯德哥尔摩,维也纳Europe/Berlin
(UTC+01:00) 布鲁塞尔,哥本哈根,马德里,巴黎Europe/Paris
(UTC+01:00) 中非西部Africa/Lagos
(UTC+01:00) 贝尔格莱德,布拉迪斯拉发,布达佩斯,卢布尔雅那,布拉格Europe/Budapest
(UTC+01:00) 萨拉热窝,斯科普里,华沙,萨格勒布Europe/Warsaw
(UTC+01:00) 温得和克Africa/Windhoek
(UTC+02:00) 雅典,布加勒斯特,伊斯坦布尔Europe/Istanbul
(UTC+02:00) 赫尔辛基,基辅,里加,索非亚,塔林,维尔纽斯Europe/Kiev
(UTC+02:00) 开罗Africa/Cairo
(UTC+02:00) 大马士革Asia/Damascus
(UTC+02:00) 安曼Asia/Amman
(UTC+02:00) 哈拉雷,比勒陀利亚Africa/Johannesburg
(UTC+02:00) 耶路撒冷Asia/Jerusalem
(UTC+02:00) 贝鲁特Asia/Beirut
(UTC+03:00) 巴格达Asia/Baghdad
(UTC+03:00) 明斯克Europe/Minsk
(UTC+03:00) 利雅得Asia/Riyadh
(UTC+03:00) 内罗毕Africa/Nairobi
(UTC+03:30) 德黑兰Asia/Tehran
(UTC+04:00) 莫斯科,圣彼得堡,伏尔加格勒Europe/Moscow
(UTC+04:00) 第比利斯Asia/Tbilisi
(UTC+04:00) 埃里温Asia/Yerevan
(UTC+04:00) 阿布扎比,马斯喀特Asia/Dubai
(UTC+04:00) 巴库Asia/Baku
(UTC+04:00) 路易港Indian/Mauritius
(UTC+04:30) 喀布尔Asia/Kabul
(UTC+05:00) 塔什干Asia/Tashkent
(UTC+05:00) 伊斯兰堡,卡拉奇Asia/Karachi
(UTC+05:30) 斯里加亚渥登普拉Asia/Colombo
(UTC+05:30) 钦奈,加尔各答,孟买,新德里Asia/Kolkata
(UTC+05:45) 加德满都Asia/Kathmandu
(UTC+06:00) 阿斯塔纳Asia/Almaty
(UTC+06:00) 达卡Asia/Dhaka
(UTC+06:00) 叶卡捷琳堡Asia/Yekaterinburg
(UTC+06:30) 仰光Asia/Yangon
(UTC+07:00) 曼谷,河内,雅加达Asia/Bangkok
(UTC+07:00) 新西伯利亚Asia/Novosibirsk
(UTC+08:00) 克拉斯诺亚尔斯克Asia/Krasnoyarsk
(UTC+08:00) 乌兰巴托Asia/Ulaanbaatar
(UTC+08:00) 北京,重庆,香港,乌鲁木齐Asia/Shanghai
(UTC+08:00) 佩思Australia/Perth
(UTC+08:00) 吉隆坡,新加坡Asia/Singapore
(UTC+08:00) 台北Asia/Taipei
(UTC+09:00) 伊尔库茨克Asia/Irkutsk
(UTC+09:00) 首尔Asia/Seoul
(UTC+09:00) 大阪,札幌,东京Asia/Tokyo
(UTC+09:30) 达尔文Australia/Darwin
(UTC+09:30) 阿德莱德Australia/Adelaide
(UTC+10:00) 霍巴特Australia/Hobart
(UTC+10:00) 雅库茨克Asia/Yakutsk
(UTC+10:00) 布里斯班Australia/Brisbane
(UTC+10:00) 关岛,莫尔兹比港Pacific/Port_Moresby
(UTC+10:00) 堪培拉,墨尔本,悉尼Australia/Sydney
(UTC+11:00) 符拉迪沃斯托克Asia/Vladivostok
(UTC+11:00) 所罗门群岛,新喀里多尼亚Pacific/Guadalcanal
(UTC+12:00) 协调世界时+12Etc/GMT-12
(UTC+12:00) 斐济,马绍尔群岛Pacific/Fiji
(UTC+12:00) 马加丹Asia/Magadan
(UTC+12:00) 奥克兰,惠灵顿Pacific/Auckland
(UTC+13:00) 努库阿洛法Pacific/Tongatapu
(UTC+13:00) 萨摩亚群岛Pacific/Apia

Referenced from:https://jp.cybozu.help/general/zh/admin/list_systemadmin/list_localization/timezone.html

需要注意的是:
time():返回自00:00:00 UTC, January 1, 1970到現在所經過的秒數,注意,是UTC,中文默认时间是CST,也是UTC+08:00

本文链接地址:https://const.net.cn/329.html

标签: none

添加新评论