Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 获取它所在的时区';上午10点(或任意时间)?_Date_Timezone_Timezone Offset - Fatal编程技术网

Date 获取它所在的时区';上午10点(或任意时间)?

Date 获取它所在的时区';上午10点(或任意时间)?,date,timezone,timezone-offset,Date,Timezone,Timezone Offset,我试图解决这个问题已经有一段时间了,但逻辑一直在逃避我。在任何给定的语言上,计算现在是给定时间的时区的逻辑是什么 我的第一个答案有一个错误,正如作者所指出的。这是我答案中的一个重大设计缺陷,因此我决定用一个新的答案重新开始,而不是编辑这个答案 为了保证这次我做对了,我循环了所有24个“请求的”小时(00-23),并输出了所有具有这些请求时间的位置。输出相当长,因此我只提供一个链接: 请注意,在这个答案中,有些时间现在是早上6点(例如),但日期不同: Time is 06:00 Etc/GMT+

我试图解决这个问题已经有一段时间了,但逻辑一直在逃避我。在任何给定的语言上,计算现在是给定时间的时区的逻辑是什么

我的第一个答案有一个错误,正如作者所指出的。这是我答案中的一个重大设计缺陷,因此我决定用一个新的答案重新开始,而不是编辑这个答案

为了保证这次我做对了,我循环了所有24个“请求的”小时(00-23),并输出了所有具有这些请求时间的位置。输出相当长,因此我只提供一个链接:

请注意,在这个答案中,有些时间现在是早上6点(例如),但日期不同:

Time is 06:00
Etc/GMT+11                     2016-01-27 06:00:00 GMT+11
Etc/GMT-13                     2016-01-28 06:00:00 GMT-13
Pacific/Auckland               2016-01-28 06:00:00 NZDT
Pacific/Chatham                2016-01-28 06:45:00 CHADT
Pacific/Enderbury              2016-01-28 06:00:00 PHOT
Pacific/Fakaofo                2016-01-28 06:00:00 TKT
Pacific/Niue                   2016-01-27 06:00:00 NUT
Pacific/Pago_Pago              2016-01-27 06:00:00 SST
Pacific/Tongatapu              2016-01-28 06:00:00 TOT
实现这一点的算法是简单地循环所有时区,获取当前本地时间,并将该时间的小时数与“请求的”小时数进行比较。代码如下:

#包括“tz.h”
#包括
#包括
#包括
int
main()
{
对于(int-hh=0;hh<24;++hh)
{
使用名称空间std::chrono;
使用名称空间日期;
auto&db=get_tzdb();
自动现在=地板(系统时钟::现在();
自动目标=小时{hh};

std::无法计算“现在”对于utc。计算出所需时间的utc增量。搜索所有具有该值的已知时区delta@Vorsprung…在那个特定的UTC时间点。@MattJohnson是的,值得记住的是夏令时变化时间意味着不同的地方在一年中的不同时间有不同的偏移量是的-这看起来是正确的。谢谢!!!(真的很感谢你的库顺便说一句-我现在正在看你的CppCon视频。)@MattJohnson:谢谢你指出我愚蠢的错误。我很忙……一点也不愚蠢。大多数人都不会明白。当然,单元测试会,但我很少对我的StackOverflow示例进行单元测试。哈哈。