精华内容
下载资源
问答
  • c++时区转换
    千次阅读
    2017-12-29 00:55:23
    #include <time.h>
    #include <stdio.h>
    #include <iostream>
    #include <map>
    
    
    void getTimeTmp(std::string &timeTmp, std::string timezone){
        time_t current_timet;
        time(&current_timet);//得到当前时间秒数
    
    
        std::map<std::string, int> tzone;
        tzone.insert ( std::pair <std::string, int>  ("CST" , 28800) );
        tzone.insert ( std::pair <std::string, int>  ("ICT" , 25200) );
    
    
        current_timet += tzone[timezone];
    
    
    
    
        struct tm utc_tm;
        gmtime_r (&current_timet, &utc_tm);//得到GMT,即UTC时间
        char str[256] = {0};
        sprintf(str, "%d-%d-%d %d:%d:%d\n", utc_tm.tm_year + 1900, utc_tm.tm_mon + 1, utc_tm.tm_mday, utc_tm.tm_hour, utc_tm.tm_min, utc_tm.tm_sec);
        timeTmp = str;
        std::set<string> mySet;    // 直接定义内置类型set集合
        mySet.insert("1400");
        mySet.insert("400");       // 默认比较函数为less
        mySet.insert("10");       // 默认比较函数为less
        mySet.insert("10");       // 从小到大排序
        mySet.insert("12");
        std::set<string>::iterator;
        for(std::set<std::string>::const_iterator i = mySet.begin(); i != mySet.end(); ++i)
        {
            std::cout << *i << '\n';
        }
    
    }
    
    
    
    更多相关内容
  •  时间戳转换(时间戳:自 1970 年1月1日(00:00:00 )至当前时间的总秒数。)  #include  #include int main(int argc, const char * argv[])  {  time_t t;  struct tm *p;  t=1408413451;  p=...
  • 前言 UTC 时间DateTime.UtcNow 和 系统本地时间 DateTime.Now 相差8个时区 ,美国本地时间和北京时间相差15个时区: 美国,而一般使用UTC时间...1.C/C++标准库提供了标准函数可以转换, 不需要借助Win32 API. 例子 //
  • 时间戳转换(时间戳:自 1970 年1月1日(00:00:00 )至当前时间的总秒数。) #include <stdio.h> #include <time.h> int main(int argc, const char * argv[]) { time_t t; struct tm *p...

    问题由来

    时间戳转换(时间戳:自 1970 年1月1日(00:00:00 )至当前时间的总秒数。)

    复制代码
    #include <stdio.h>
    #include <time.h>
    
    int main(int argc, const char * argv[])
    {    
        time_t t;
        struct tm *p;
        t=1408413451;
        p=gmtime(&t);
        char s[80];
        strftime(s, 80, "%Y-%m-%d %H:%M:%S", p);
        printf("%d: %s\n", (int)t, s);
    }
    复制代码

    结果

    1
    1408413451       2014 -08 -19  01: 57: 1408384651

    可是利用命令在linux终端计算的结果不一

    1
    2
    [###t]$ date -d @ 1408413451
    Tue Aug  19  09: 57: 31  CST  2014

    通过比较发现,两者正好差8个小时,CST表示格林尼治时间,通过strftime()函数可以输出时区,改正如下

    复制代码
    #include <stdio.h>
    #include <time.h>
    
    int main(int argc, const char * argv[])
    {    
        time_t t;
        struct tm *p;
        t=1408413451;
        p=gmtime(&t);
        char s[80];
        strftime(s, 80, "%Y-%m-%d %H:%M:%S::%Z", p);
        printf("%d: %s\n", (int)t, s);
    }
    复制代码

    结果

    1
    1408413451:  2014 -08 -19  01: 57: 31: :GMT

     

    深究

    GMT(Greenwich Mean Time)代表格林尼治标准时间。十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测。1675年旧皇家观测所正式成立,通过格林威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)的由来。

    CST却同时可以代表如下 4 个不同的时区:

    1
    2
    3
    4
    Central Standard Time (USA) UT -6: 00
    Central Standard Time (Australia) UT+ 9: 30
    China Standard Time UT+ 8: 00
    Cuba Standard Time UT -4: 00

    可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。

    好了两者差8个小时(CST比GMT晚/大8个小时),GMT+8*3600=CST,代码如下

    复制代码
    #include <stdio.h>
    #include <time.h>
    
    int main(int argc, const char * argv[])
    {    
        time_t t;
        struct tm *p;
        t=1408413451;
        p=gmtime(&t);
        char s[80];
        strftime(s, 80, "%Y-%m-%d %H:%M:%S::%Z", p);
        printf("%d: %s\n", (int)t, s);
    
        t=1408413451 + 28800;
        p=gmtime(&t);
        strftime(s, 80, "%Y-%m-%d %H:%M:%S", p);
        printf("%d: %s\n", (int)t, s);
        return 0;
    }
    复制代码

    结果

    1
    2
    1408413451:  2014 -08 -19  01: 57: 31: :GMT
    1408442251:  2014 -08 -19  09: 57: 31

    linux平台

    1
    Tue Aug  19  09: 57: 31  CST  2014

      




    本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3922919.html,如需转载请自行联系原作者

    展开全文
  • 时区转换器 TimeZoneConverter.Posix TimeZoneConverter是一个轻量级的库,可以在IANA,Windows和Rails时区名称之间快速转换。 TimeZoneConverter.Posix添加了对生成POSIX时区字符串的支持,这在IoT等特定情况下很...
  • 下面的实现计算当前时区与UTC时间的偏移, #include <stdio.h> #include <time.h> int main() { // 获取系统时间 time_t _rt = time(NULL); // 系统时间转换为GMT时间 tm _gtm = *gmtime(&_rt)...

    下面的实现计算当前时区与UTC时间的偏移,

    #include <stdio.h>
    #include <time.h>
    
    int main()
    {
    	// 获取系统时间
    	time_t _rt = time(NULL);
    	// 系统时间转换为GMT时间
    	tm _gtm = *gmtime(&_rt);
    	// 系统时间转换为本地时间
    	tm _ltm = *localtime(&_rt);
    	printf("UTC:       %s", asctime(&_gtm));
    	printf("local:     %s", asctime(&_ltm));
    	// 再将GMT时间重新转换为系统时间
    	time_t _gt = mktime(&_gtm);
    	tm _gtm2 = *localtime(&_gt);
    	// 这时的_gt已经与实际的系统时间_rt有时区偏移了,计算两个值的之差就是时区偏的秒数,除60就是分钟
    	int offset = ((_rt - _gt ) + (_gtm2.tm_isdst ? 3600 : 0)) / 60;
    	printf(" offset (minutes) %d", offset);
    }
    

    输出结果:
    在这里插入图片描述

    展开全文
  • void zUTC(struct shijian &a, double cha) {//时间转换函数 int tem;//临时变量 int qian = stoi(a.time.substr(0, a.time.find(":")));//用来存储12:00 的 12 int hou = stoi(a.time.substr(a.time.find(":") ...

    直到19世纪,时间校准是一个纯粹的地方现象。每一个村庄当太阳升到最高点的时候把他们的时钟调到中午12点。一个钟表制造商人家或者村里主表的时间被认为是官方时间,市民们把自家的钟表和这个时间对齐。每周一些热心的市民会带着时间标准的表,游走大街小巷为其他市民对表。在城市之间旅游的话,在到达新地方的时候需要把怀表校准。但是,当铁路投入使用之后,越来越多的人频繁地长距离地往来,时间变得越来越重要。在铁路的早期,时刻表非常让人迷惑,每一个所谓的停靠时间都是基于停靠地点的当地时间。时间的标准化对于铁路的高效运营变得非常重要。
    在1878年,加拿大人Sir Sanford Fleming 提议使用一个全球的时区(这个建议被采纳,并衍生了今天我们所使用的全球时区的概念),他建议把世界分成24个时区,每一个跨越15度经线(因为地球的经度360度,划分成24块后,一块为15度)。Sir Sanford Fleming的方法解决了一个全球性的时间混乱的问题。
    美国铁路公司于1883年11月18日使用了Fleming 提议的时间方式。1884年一个国际子午线会议在华盛顿召开,他的目的是选择一个合适的本初子午线。大会最终选定了格林威治为标准的0度。尽管时区被确定了下来,但是各个国家并没有立刻更改他们的时间规范,在美国,尽管到1895年已经有很多州开始使用标准时区时间,国会直到1918年才强制使用会议制定的时间规范。
    今天各个国家使用的是一个Fleming时区规范的一个变种,中国一共跨越了5个时区,但是使用了一个统一的时间规范,比Coordinated Universal Time(UTC,格林威制时间)早8个小时。俄罗斯也拥护这个时区规范,尽管整个国家使用的时间和标准时区提前了1个小时。澳大利亚使用3个时区,其中主时区提前于他按Fleming规范的时区半小时。很多中东国家也使用了半时时区(即不是按照Fleming的24个整数时区)。
    因为时区是对经度进行划分,在南极或者北极工作的科学家直接使用了UTC时间,否则南极大陆将被分解成24个时区。
    时区的转化表如下:
    UTC Coordinated Universal Time
    GMT Greenwich Mean Time, 定义为 UTC
    BST British Summer Time, 定义为 UTC+1 hour
    IST Irish Summer Time, 定义为 UTC+1 hour
    WET Western Europe Time, 定义为 UTC
    WEST Western Europe Summer Time, 定义为 UTC+1 hour
    CET Central Europe Time, 定义为 UTC+1
    CEST Central Europe Summer Time, 定义为 UTC+2
    EET Eastern Europe Time, 定义为 UTC+2
    EEST Eastern Europe Summer Time, 定义为 UTC+3
    MSK Moscow Time, 定义为 UTC+3
    MSD Moscow Summer Time, 定义为 UTC+4
    AST Atlantic Standard Time, 定义为 UTC-4 hours
    ADT Atlantic Daylight Time, 定义为 UTC-3 hours
    NST Newfoundland Standard Time, 定义为 UTC-3.5 hours
    NDT Newfoundland Daylight Time, 定义为 UTC-2.5 hours
    EST Eastern Standard Time, 定义为 UTC-5 hours
    EDT Eastern Daylight Saving Time, 定义为 UTC-4 hours
    CST Central Standard Time, 定义为 UTC-6 hours
    CDT Central Daylight Saving Time, 定义为 UTC-5 hours
    MST Mountain Standard Time, 定义为 UTC-7 hours
    MDT Mountain Daylight Saving Time, 定义为 UTC-6 hours
    PST Pacific Standard Time, 定义为 UTC-8 hours
    PDT Pacific Daylight Saving Time, 定义为 UTC-7 hours
    HST Hawaiian Standard Time, 定义为 UTC-10 hours
    AKST Alaska Standard Time, 定义为 UTC-9 hours
    AKDT Alaska Standard Daylight Saving Time, 定义为 UTC-8 hours
    AEST Australian Eastern Standard Time, 定义为 UTC+10 hours
    AEDT Australian Eastern Daylight Time, 定义为 UTC+11 hours
    ACST Australian Central Standard Time, 定义为 UTC+9.5 hours
    ACDT Australian Central Daylight Time, 定义为 UTC+10.5 hours
    AWST Australian Western Standard Time, 定义为 UTC+8 hours
    下面给出了一些时间,请在不同时区之间进行转化。
    输入
    输入的第一行包含了一个整数N,表示有N组测试数据。接下来N行,每一行包括一个时间和两个时区的缩写,它们之间用空格隔开。时间由标准的a.m./p.m给出。midnight表示晚上12点(12:00 a.m.),noon表示中午12点(12:00 p.m.)。
    输出
    假设输入行给出的时间是在第一个时区中的标准时间,要求输出这个时间在第二个时区中的标准时间。
    样例输入

    4
    noon HST CEST
    11:29 a.m. EST GMT
    6:01 p.m. CST UTC
    12:40 p.m. ADT MSK

    样例输出

    midnight
    4:29 p.m.
    12:01 a.m.
    6:40 p.m

    代码:.

    #include <iostream>
    #include<map>
    #include<string>
    using namespace std;
    struct shijian { //定义时间结构体
    	string time, biao; // time 用来储存 12:00 ,biao 用来存储 a.m. 等标识
    }sj;
    void zUTC(struct shijian &a, double cha) {//时间转换函数
    	int tem;//临时变量
    	int qian = stoi(a.time.substr(0, a.time.find(":")));//用来存储12:00 的 12
    	int hou = stoi(a.time.substr(a.time.find(":") + 1));//用来存储12:00 的 00
    	if (a.biao == "a.m.")// 时间为上午,特殊考虑凌晨 12 点
    		qian == 12 ? tem = hou : tem = qian * 60 + hou;
    	else// 时间为下午,特殊考虑中午 12 点
    		qian == 12 ? tem = qian * 60 + hou : tem = (qian + 12) * 60 + hou;
    	tem += cha * 60;//两地时间差
    	if (tem < 0)
    		tem = 1440 + tem;
    	int hour = tem / 60 % 24;
    	int minute = tem % 60;
    	if (hour >= 12) {// 时间为下午,特殊考虑中午 12 点
    		if (hour != 12) {
    			if(minute%10==minute)//注意输出格式
    				a.time = to_string(hour - 12) + ":0" + to_string(minute);
    			else 
    				a.time = to_string(hour - 12) + ":" + to_string(minute);
    		}
    		else {
    			if (minute % 10 == minute)
    				a.time = "12:0" + to_string(minute);
    			else
    				a.time = "12:" + to_string(minute);
    		}
    		a.biao = "p.m.";
    	}
    	else{// 时间为上午,特殊考虑凌晨 12 点( 0 点)
    		if (hour != 0) {
    			if (minute % 10 == minute)
    				a.time = to_string(hour) + ":0" + to_string(minute);
    			else
    				a.time = to_string(hour) + ":" + to_string(minute);		
    		}
    		else {
    			if (minute % 10 == minute)
    				a.time = "12:0" + to_string(minute);
    			else
    				a.time = "12:" + to_string(minute);
    		}
    		a.biao = "a.m.";
    	}
    }
    int main() {
    	map<string, double> map;
    	map["UTC"] = 0;
    	map["GMT"] = 0;
    	map["BST"] = 1;
    	map["IST"] = 1;
    	map["WET"] = 0;
    	map["WEST"] = 1;
    	map["CET"] = 1;
    	map["CEST"] = 2;
    	map["EET"] = 2;
    	map["EEST"] = 3;
    	map["MSK"] = 3;
    	map["MSD"] = 4;
    	map["AST"] = -4;
    	map["ADT"] = -3;
    	map["NST"] = -3.5;
    	map["NDT"] = -2.5;
    	map["EST"] = -5;
    	map["EDT"] = -4;
    	map["CST"] = -6;
    	map["CDT"] = -5;
    	map["MST"] = -7;
    	map["MDT"] = -6;
    	map["PST"] = -8;
    	map["PDT"] = -7;
    	map["HST"] = -10;
    	map["AKST"] = -9;
    	map["AKDT"] = -8;
    	map["AEST"] = 10;
    	map["AEDT"] = 11;
    	map["ACST"] = 9.5;
    	map["ACDT"] = 10.5;
    	map["AWST"] = 8;
    	int n;
    	while (cin >> n) {
    		while (n--){
    			string tem; cin >> tem;
    			string time, biao, part1, part2;// time 用来储存 12:00 ,biao 用来存储 a.m. 等标识
    			if (tem == "noon") {
    				sj.time = "12:00";
    				sj.biao = "p.m.";
    			}
    			else if (tem == "midnight") {
    				sj.time = "12:00";
    				sj.biao = "a.m.";
    			}
    			else {
    				sj.time = tem;
    				cin >> sj.biao;
    			}
    			cin >> part1 >> part2;//输入地区名
    			double cha = map[part2] -map[part1];//计算两地区时差
    			zUTC(sj, cha);
    			if (sj.time == "12:00"&&sj.biao == "a.m.")
    				cout << "midnight" << endl;
    			else if (sj.time == "12:00"&&sj.biao == "p.m.")
    				cout << "noon" << endl;
    			else
    				cout << sj.time << " " << sj.biao << endl;
    		}
    	}
    }
    
    展开全文
  • 主要介绍了C++时间戳转化操作,结合实例形式分析了C++时间戳转换与显示操作的原理与具体实现技巧,涉及GMT与CST时区转化,需要的朋友可以参考下
  • C++实现北京时间与时间戳转换

    千次阅读 2017-09-29 15:35:54
    http://blog.csdn.net/wangqing_12345/article/details/52092728
  • Linux C/C++ 时间戳转换工具实现 int main(int argc, char** argv) { if(argc > 1) { // 帮助消息 if(!strcmp(argv[1], "-help") || !strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")) { ...
  • linux下C/C++时间函数,时间获取函数,时间转换,时间差计算,线程安全的时间转换函数
  • C++笔记之获取utc时间并转换为local时间 代码 #include <algorithm> #include <chrono> #include <iomanip> #include <iostream> #include <string> std::string trim_blank(std::...
  • 时区_通用库 目录 发布v1.2.5 发布v1.2.4 先决条件 安装 使用Arduino库管理器 手动安装 VS代码和PlatformIO 包装补丁 1.对于Adafruit nRF52840和nRF52832板 2.对于青少年板 3.对于Arduino SAM DUE板 4.对于...
  • c++时间戳获取和转换

    千次阅读 2022-05-11 14:58:07
    3、时间转time_t 对于一些不标准的字符串时间,我们需要转换时,可以十一用sscanf函数,windows下使用sscanf_s time_t StringToDatetime(const char* str) { tm tm_; int year, month, day, hour, minute, second; ...
  • c++11把时间转换为字符串方法大全

    千次阅读 2020-09-24 16:09:29
    C++11格式化时间的方法非常方便,主要使用了std::put_time的方式来进行格式化: 定义于头文件<iomanip> template<classCharT> /*unspecified*/put_time(conststd::tm*tmb,...
  • C++时间戳与时间日期格式互相转换

    千次阅读 2020-12-03 20:41:18
    //把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtimes函数转换后的时间没有经过时区变换,是UTC时间 //windows vs2010++ errno_t localtime_s( struct tm* _tm, //时间结构体的指针 ...
  • } /* 功能:时间戳转换成标准时间 描述: */ std::string stamp_to_standard(int stampTime) { time_t tick = (time_t)stampTime; struct tm tm; char s[100]; tm = *localtime(&tick); strftime(s, sizeof(s), "%Y...
  • 日期与unix时间戳之间的转换C++实现

    千次阅读 2021-01-01 19:01:39
    之前在https://blog.csdn.net/fengbingchun/article/details/107023645 中介绍过gmtime和localtime的区别,这里介绍下日期与Unix时间戳之间转换的实现,其中也会用到这两个函数。 Unix时间戳(Unix timestamp):是一...
  • C++中时间转换

    2019-05-14 11:42:00
    所需头文件 #include #include ...,time._Tptr->tm_mday,time._Tptr->tm_hour, time._Tptr->tm_min, time._...C++11 std::chrono库详解   转载于:https://www.cnblogs.com/xiangtingshen/p/10861394.html
  • 时区库-该库使用系统上安装的IANA时区数据库在绝对时间和民用时间之间进行转换。 该库在 。 目前已知这些库可在Linux , Mac OS X和Android上运行。 如果您安装zoneinfo文件,它们也将在Windows上运行。 但是,...
  • C++中各种时间转换实例

    千次阅读 2018-09-23 13:25:47
    //转换为没有经过时区转换的UTC时间 struct tm *gtm = gmtime(&time); //char *asctime(const struct tm *tm); //以字符串的形式显示 std::cout(gtm); //Wed Feb 13 06:18:18 2019 //struct tm *localtime...
  • c++时间戳的介绍和转换

    千次阅读 2019-07-22 18:37:53
    mktime()转换的时间带有时区,linux版本使用tzset、windows版本使用setTimeZoneInformation设置时区转换时不考虑tm结构的tm_wday和tm_yday,仅用tm_mday来决定日期。 返回值: 返回经过的秒数。 /* 用time()...
  • C++获取当前系统时间 UTC 时间 转换

    千次阅读 2019-07-27 11:34:15
    //c++ 标准库没有提供日期类型,C++ 继承c的函数与操作 有四个与时间相关的类型:clock_t、time_t、size_t 和 tm。类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。 结构类型 tm 把日期和...
  • C++北京时间(字符串)和时间戳相互转换 /********************************************************************* Describe : 将北京时间转换成时间戳 Input : pStr 字符串时间 Output : tempTime 整形...
  • C++11提供了std::get_time函数用于解析时间格式字符串,解析成功后将时间保存在std::tm结构中。 但是对于ISO8601标准中有毫秒精度的字符串比如('2014-11-12T19:12:14.505+0800')是不支持的。 如何解析这种有毫秒精度...
  • C++ 将时间戳转换成标准时间

    千次阅读 2019-05-24 08:45:23
    #define _CRT_SECURE_NO_WARNINGS 1 #include "iostream" #include "time.h" #include "string.h" using namespace std; typedef struct times { int Year; int Mon; int Day;... int Second...
  • 逻辑如上所述,代码如下 代码如下:/// <summary> /// AMESTime 的摘要说明: /// 美东时间的转换 /// /// 美东时间在UTC-5时区,美国有夏时制,即在夏令时启用之后美东时间比起所在时区早一个小时,即UTC-4 /// 在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,428
精华内容 3,371
关键字:

c++时区转换