C 将时间(由字符串表示)从一个时区转换为另一个时区
在我的应用程序中,我将用户指定的时间转换为C 将时间(由字符串表示)从一个时区转换为另一个时区,c,datetime,timezone,C,Datetime,Timezone,在我的应用程序中,我将用户指定的时间转换为time\t格式并存储。稍后,我将以本地时区显示此时间。以下是我的测试代码: int main() { const char* INPUTFMT = "%b %d, %Y %H:%M:%S %Z"; const char* SAMPLETIME = "Feb 19, 2016 01:00:00 EST"; struct tm tm = {0}; char* val = strptime(SAMPLETIME, INPUTFMT, &a
time\t
格式并存储。稍后,我将以本地时区显示此时间。以下是我的测试代码:
int main() {
const char* INPUTFMT = "%b %d, %Y %H:%M:%S %Z";
const char* SAMPLETIME = "Feb 19, 2016 01:00:00 EST";
struct tm tm = {0};
char* val = strptime(SAMPLETIME, INPUTFMT, &tm);
time_t st = mktime(&tm);
const struct tm* t1 = localtime(&st);
static const char* OUTPUTFMT = "%b %d, %G %I:%M:%S %p %Z";
char buf[100];
strftime (buf, 100, OUTPUTFMT, t1);
printf("%s\n", buf);
return 0;
}
指定的时区是EST,我的本地时区是PST
我遇到的问题是,尽管我的本地时区与指定的时区不同,但我看到的时间相同,只是EST被PST取代
我想知道我做错了什么。问候。我的系统(OS X)上的
strtime
手册页上写着:
%Z格式说明符只接受
本地时区,或值“GMT”。这种限制是因为
由于时区缩写的过度加载而导致的歧义。一个
例如东部标准时间和东部标准时间
澳大利亚夏季时间
因此,这一行:
char* val = strptime(SAMPLETIME, INPUTFMT, &tm);
正在悄无声息地忽略输入中的“EST”,而是使用当前的本地时间偏移量。因此,当您将其从当前本地时间转换回此处时:
strftime (buf, 100, OUTPUTFMT, t1);
您可以获得从当前本地时间到UTC再回到当前本地时间的往返行程
有关如何处理时区的更多建议,请参阅此语言中性。@stackptr,即使语义是常量?非常确定所有caps都是c/c++常量命名的标准。c没有符号常量。它不是C++。code>const限定对象在语义上仍然是变量。请改用宏。@Olaf Semantic,如“关联[of]的[the]含义”?@user2864740:只需遵循语言语义即可。在C语言中,要么使用枚举常量(真正的符号常量,但总是
int
并且语法上有问题),要么使用宏——这是常见的方法。C不是C++,因此你不应该尝试用C来编码C++风格(反之亦然)。而且指针不是常量!