c++中如何将unix时间戳转换为标准时间,有函数吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中如何将unix时间戳转换为标准时间,有函数吗相关的知识,希望对你有一定的参考价值。

参考技术A C/C++ code

#include <stdio.h>
#include <time.h>

int main(void)

time_t tick;
struct tm tm;
char s[100];

tick = time(NULL);
tm = *localtime(&tick);
strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", &tm);
printf("%d: %s\n", (int)tick, s);

return 0;
本回答被提问者和网友采纳

你如何将一个非常大的 (>max(int64)) 纳秒 unix 时间戳转换为 time.Time

【中文标题】你如何将一个非常大的 (>max(int64)) 纳秒 unix 时间戳转换为 time.Time【英文标题】:How do you convert a very large (>max(int64)) nanosecond unix timestamp to time.Time 【发布时间】:2021-09-01 04:05:56 【问题描述】:

我有一个大于 int64 可以容纳的最大值的 uint64 纳秒 unix 时间戳。由于我不能再使用采用 int64 的 time.Unix() 函数,我怎样才能将此时间戳转换为时间而不丢失数据?

【问题讨论】:

你能提供价值观的例子吗? 【参考方案1】:

time.Unix() 函数有 2 个参数:

func Unix(sec int64, nsec int64) Time

如果您有int64 纳秒,您可以为sec 传递0,为nsec 传递纳秒值。例如:

nsec := int64(1623840300988135567)
t := time.Unix(0, nsec)
fmt.Println(t) // 2021-06-16 10:45:00.988135567 +0000 UTC

传递 [0, 999999999] 范围之外的纳秒值是有效的。

如果您的纳秒值不适合int64,则只需将其分成两部分:秒和剩余的纳秒。打破它只是简单地除以并得到除以1e9 的余数(这是一秒内的纳秒数)。

例如:

x := uint64(math.MaxInt64)
t = time.Unix(0, int64(x))
fmt.Println(t)

x += uint64(time.Hour)
t = time.Unix(int64(x/1e9), int64(x%1e9))
fmt.Println(t)

time.Hour 添加到math.MaxInt64 显然不适合int64。然而上面的代码运行良好并输出:

2262-04-11 23:47:16.854775807 +0000 UTC
2262-04-12 00:47:16.854775807 +0000 UTC

在Go Playground 上试试。

【讨论】:

以上是关于c++中如何将unix时间戳转换为标准时间,有函数吗的主要内容,如果未能解决你的问题,请参考以下文章

php怎么将指定日期转换为时间戳

将 Unix 时间戳转换为时区?

linux怎么将时间戳转换为时间

linux怎么将时间戳转换为时间

vue.js怎样将时间戳转化为日期格式

C# Unix时间戳转换为时间