C语言 将时间(由字符串表示)从一个时区转换为另一个时区



在我的应用程序中,我将用户指定的时间转换为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("%sn", buf);
  return 0;
} 

指定的时区是 EST,我的本地时区是太平洋标准时间。

我遇到的问题是,尽管我的本地时区与指定的时区不同,但我看到的时间相同,只是 EST 被 PST 取代。

我想知道我做错了什么。问候。

我的系统(OS X)上strptime的手册页显示:

%Z 格式说明符仅接受 本地时区,或值"GMT"。 此限制是因为 由于时区缩写的过载而导致的歧义。 一 这样的例子是东部标准时间和东部时间的EST 澳大利亚夏令时。

因此,这一行:

char* val = strptime(SAMPLETIME, INPUTFMT, &tm);

静默忽略输入中的"EST",而是使用当前的本地时间偏移量。 因此,当您在此处将其从当前本地时间转换回来时:

strftime (buf, 100, OUTPUTFMT, t1);

您可以从当前当地时间到 UTC 并返回当前当地时间。

请参阅此中性语言堆栈溢出答案,以获取有关如何处理时区的更多建议。

相关内容

  • 没有找到相关文章