【问题标题】:Get date from specific timezone - C从特定时区获取日期 - C
【发布时间】:2013-03-15 07:07:38
【问题描述】:

我需要从特定时区获取日期/时间而不设置TZ 变量。

我尝试使用gmtime 并加上小时差,我用这种方法遇到的问题是时间变化,例如日光,或中国/美国之间由小时引起的日差,我需要为了处理所有这些,有什么方法/库或任何我可以用来获取包含这些变化的特定时区的方法吗?

我正在使用win32,如果它可以与所有东西一起使用会更好。谢谢!

【问题讨论】:

  • 有什么原因不能存储TZ的初始值,获取时间,然后重置TZ
  • gettimeofday() 将 struct timezone * 作为附加参数
  • @raptortech97 我在使用 TZ 时遇到了一些问题,setenvtzset 找不到(我已经在很多库中搜索过),我想这是因为我在windows 7 (win32)下
  • 改变 TZ 的一次缩小设置为整个过程。

标签: c date time timezone


【解决方案1】:

执行此操作的最佳方法(如果我正确理解您的要求)是使用 Olson/IANA TZ 数据库。 Wikipedia article 指向IANA sources

使用这个库不是单行的(尽管取决于您的平台,该库可能已经安装或易于安装)。但是(a)这是正确的做法,(b)它与您可能找到的其他任何东西一样强大和准确,并且(c)众所周知,我希望您在谷歌上搜索信息不会有什么困难以及有关它的教程,如果您需要的话。

【讨论】:

    【解决方案2】:

    也许localtime() 对你有用。

    #include <stdio.h>      /* puts, printf */
    #include <time.h>       /* time_t, struct tm, time, localtime */
    
    int main ()
    {
      time_t rawtime;
      struct tm * timeinfo;
    
      time (&rawtime);
      timeinfo = localtime (&rawtime);
      printf ("Current local time and date: %s", asctime(timeinfo));
    
      return 0;
    }
    

    【讨论】:

    • 这是一个很好的答案,但它会获取您的计算机正在使用的时区的时间,我在说什么,它是如何获取例如美国、中国和 GMT+ 的时区以 5 为例。
    • @Spamdark - 哦,好吧,我以为你是从(本地计算机)运行代码的地方提到的,而不是你会选择它们......对不起。我会看看我能想到的。
    • 是的,我的意思是,例如获取美国设置时区的时间(我写了获取时区...)
    猜你喜欢
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多