Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/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
使用C++; 。这是用于相对定时的:ISO C++没有指定 1970-01-01T0:0Z 是代码> TimeTyt(0)< /Calp>_C++_Unix_Timestamp_Uint - Fatal编程技术网

使用C++; 。这是用于相对定时的:ISO C++没有指定 1970-01-01T0:0Z 是代码> TimeTyt(0)< /Calp>

使用C++; 。这是用于相对定时的:ISO C++没有指定 1970-01-01T0:0Z 是代码> TimeTyt(0)< /Calp>,c++,unix,timestamp,uint,C++,Unix,Timestamp,Uint,C++20引入了一个与UNIX时代相关的保证,并给出了一个示例,我已经提炼出相关的代码,并改为秒而不是小时: #include <iostream> #include <chrono> int main() { const auto p1 = std::chrono::system_clock::now(); std::cout << "seconds since epoch: " <

C++20引入了一个与UNIX时代相关的保证,并给出了一个示例,我已经提炼出相关的代码,并改为秒而不是小时:

#include <iostream>
#include <chrono>
 
int main()
{
    const auto p1 = std::chrono::system_clock::now();
 
    std::cout << "seconds since epoch: "
              << std::chrono::duration_cast<std::chrono::seconds>(
                   p1.time_since_epoch()).count() << '\n';
}
#包括
#包括
int main()
{
std::time\u t t=std::time(0);//t是整数类型
std::cout
#包括
#包括
使用名称空间std;
int main()
{
无符号长整数秒=时间(空);

CUT

最常见的建议是错误的,不能仅仅依赖于<代码>时间()/代码>。这是用于相对定时的:ISO C++没有指定<代码> 1970-01-01T0:0Z 是代码> TimeTyt(0)< /Calp>


更糟糕的是,你也不能很容易地找出它。当然,你可以找到
time\u t(0)的日历日期
使用
gmtime
,但是如果是
2000-01-01T00:00Z
,你会怎么做?1970-01-01T00:00Z
2000-01-01T00:00Z
之间有多少秒?由于闰秒的原因,肯定不是60的倍数。

Windows使用不同的历元和时间单位:请参阅


Windows上std::time()返回的内容(到目前为止)我还不知道(;-)

我创建了一个全局定义,其中包含更多信息:

#include <iostream>
#include <ctime>
#include <iomanip>

#define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)    // only show filename and not it's path (less clutter)
#define INFO std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [INFO] " << __FILENAME__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
#define ERROR std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [ERROR] " << __FILENAME__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "

static std::time_t time_now = std::time(nullptr);

将这些行放在头文件中。我发现这对调试等非常有用。

因为这是google上的第一个结果,目前还没有C++20答案,下面介绍如何使用std::chrono来完成此操作:

#include <chrono>

//...

using namespace std::chrono;
int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
#包括
//...
使用名称空间std::chrono;
int64_t timestamp=duration_cast(系统时钟::now().time_自_epoch()).count();

<> P>在C++版本20之前,SythyCalk的时代是UNIX时代,但它不是标准化的。如果你不是在C++ 20上,使用你自己的风险。

“EngCH”当然是UNIX和Linux上的UNIX EPROCH,但这不是通用的。“我如何在C++中获得Unix UNIX时间戳?”-给定-正如您所说-您可以稍后调用
gmtime()
以获得时间戳编码的任何内容的可读表示,问题中要求的功能是
time()无法满足的
,无论参考日期或是否适用于间隔计算?要在非UNIX系统上获得UNIX时间戳,您必须知道本地历元和
1970-01-01T00:00Z
之间的差异(以秒为单位)。没有任何方法可以做到这一点。出于某种原因,我得到的印象是,问题是UNIX上的代码(或Linux等)机器,但现在我知道你来自何方了。好奇:你有没有发现任何实际系统的时间t(0)不是1970-01-01T00:00Z?在任何给定系统上计算偏移量只需几分钟(取非UNIX时间t(0)并在UNIX系统上获取时间t),但感谢您解释您的担忧。对于VS的UNIX时间;MSDN声明:time函数返回自1970年1月1日协调世界时(UTC)午夜(00:00:00)以来经过的秒数,根据系统时钟。@TonyD:IBM系统显然是个例外。这并不奇怪,因为它们早在1970年1月1日之前就开始从事计算机业务了。
time()
返回类型为
time\u t
的结果,原则上可以是有符号的、无符号的,甚至是浮点的。为什么要将结果存储在
长int
中?为什么要使用
而不是标准的
?我理解,但我认为在任何符合posix的操作系统中,time.h和sys/time.h都是存在的。同样,您也是com完全正确的是,时间也可以是负值,因为它表示为从1970-01-01T00:00Z开始经过的秒数。这假设
std::time()
自1970年起为您提供秒数。这在许多系统上都是正确的(我相信POSIX和Windows),但语言标准并不能保证它。为什么
\define
而不是一个函数呢?函数会更灵活、可重载、更容易使用…@Troyseph,因为那时
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoch将在C++20中得到正式认可:
#include <iostream>
#include <sys/time.h>

using namespace std;

int main ()
{
  unsigned long int sec= time(NULL);
  cout<<sec<<endl;
}
#include <iostream>
#include <ctime>
#include <iomanip>

#define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)    // only show filename and not it's path (less clutter)
#define INFO std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [INFO] " << __FILENAME__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
#define ERROR std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [ERROR] " << __FILENAME__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "

static std::time_t time_now = std::time(nullptr);
INFO << "Hello world" << std::endl;
ERROR << "Goodbye world" << std::endl;
16-06-23 21:33:19 [INFO] main.cpp(main:6) >> Hello world
16-06-23 21:33:19 [ERROR] main.cpp(main:7) >> Goodbye world
#include <chrono>

//...

using namespace std::chrono;
int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();