Tag: utc

C代码获取相对于UTC的本地时间偏移(以分钟为单位)?

我没有找到一种简单的方法来获得当地时间和UTC时间之间的分钟数。 起初我打算使用tzset()但它不提供夏令时。 根据手册页,如果日光节省有效,它只是一个不等于零的整数。 虽然通常是一小时,但在某些国家可能需要半小时。 我宁愿避免计算gmtime()返回的当前UTC与localtime()之间的时差。 更通用的解决方案将为我提供指定位置和正time_t值的信息,或至少在本地。 编辑1 :用例是为https://github.com/chmike/timez获取正确的本地时间偏移量。 顺便说一句,如果您认为libc函数操作时间还可以,请阅读https://rachelbythebay.com/w/2013/03/17/time/ 。 编辑2 :迄今为止我用来计算UTC时间偏移的最佳和最简单的解决方案是 // Bogus: assumes DST is always one hour tzset(); int offset = (int)(-timezone / 60 + (daylight ? 60 : 0)); 问题是确定实际的节省时间。 编辑3 :受到@trenki答案的启发 ,我提出了以下解决方案。 这是一个黑客,它欺骗mktime()将gmtime()的输出视为gmtime() 。 当DST更改在UTC时间和本地时间之间的时间跨度时,结果是不准确的。 #include #include int main() { time_t rawtime = time(NULL); struct tm *ptm = gmtime(&rawtime); // […]

mktime返回错误的时间戳(关闭整整一个月)

我使用mktime从当前本地时间创建一个unix时间戳: #include int _tmain(int argc, _TCHAR* argv[]) { struct tm info; // 16.05.2014 info.tm_mday = 16; info.tm_mon = 5; info.tm_year = 114; // Years since 1900 // 08:00:00 Uhr info.tm_hour = 8; info.tm_min = 0; info.tm_sec = 0; // Convert to Unix timestamp info.tm_isdst = -1; time_t timestamp = mktime(&info); printf(“Timestamp: %i”, timestamp); } 这给了我: […]

在C中将包含localtime的字符串转换为UTC

我有一个包含本地日期/时间的字符串,我需要将其转换为time_t值(以UTC为单位) – 我一直在尝试这个: char* date = “2009/09/01/00”; struct tm cal = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}; strptime(date, “%Y/%m/%d/%H”, &cal); time_t t = mktime(&cal); 但是我得到的time_t值是如果字符串被解析为UTC而不是本地时间的话我期望的值。 也许我误解了strptime应该做什么,但是在我9月1日的时区(英国),我们正在使用BST(即UTC + 1小时)所以我希望我最终得到的值比UTC提前1小时。 有没有办法将字符串解释为localtime,自动考虑在该日期生效的UTC偏移量? 请注意,我需要time_t值而不是struct tm,在上面的示例中,我希望time_t值对应于2009-09-01 01:00:00 GMT

如何用C转换UTC到当地时间?

这是一个简单的问题,但解决方案似乎远非简单。 我想知道如何从UTC转换为本地时间。 我正在寻找一种标准的C解决方案,或多或少保证可以在任何位置的任何计算机上工作。 我仔细阅读了以下链接,但我找不到解决方案: 在C中将包含localtime的字符串转换为UTC 在C / C ++中在本地时间和GMT / UTC之间转换 我尝试了很多变体,例如(datetime是一个带有时间和日期的字符串,以UTC表示): strptime(datetime, “%A %B %d %Y %H %M %S”, tp); strftime(printtime, strlen(datetime), “%A %B %d %Y %H %M %S”, tp); 要么 strptime(datetime, “%A %B %d %Y %H %M %S”, tp); lt=mktime(tp); printtime=ctime(&lt); 无论我尝试什么,printtime最终都与UTC相同。 编辑11-29-2013 :基于下面“R”的非常有用的答案,我终于开始创建一个工作示例。 我发现它在我测试它的两个时区中正常工作,CET和PST: #include #include #include long long diff_tm(struct tm *a, […]