Unix时间作为本地时间的int

Unix time as int to local time

本文关键字:时间 int Unix      更新时间:2023-10-16

我有一个函数返回unix时间戳作为int。

我需要将此int转换为本地时间的字符串dd/mm/yy。"局部"部分给我带来了问题,如果不是因为这个,我可以自己编写一个函数来转换它。

我已经搜索了周围,似乎标准库中的ctime类将是理想的,以这样的方式:

int unixtime;
std::cout << std::asctime(std::localtime(unixtime));

遗憾的是,只有*time_t被接受。有什么方法可以将int转换成这种格式,或者有什么更好的方法将unix时间转换为int的本地时间?

time_t根据定义是算术类型,您可以这样做:

time_t ts = unixtime;
std::cout << std::asctime(std::localtime(&ts));
'/* localtime example */
#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;
}'

你可以简单地使用time_t类型,它会给你时间

" ctime(), gmtime()和localtime()函数都接受一个数据类型为time_t的参数,它表示日历时间。当被解释为绝对时间值时,它表示自Epoch 1970-01-01 00:00:00 +0000 (UTC)以来经过的秒数。"

:

    http://linux.die.net/man/3/ctime
  • http://linux.die.net/man/7/time

要以年/月/日为单位打印当前时间,您可以尝试以下操作:

#include <iostream>
#include <ctime>
int main(int argc, const char** argv)
{
    char date_buff[40];
    time_t time_value = time(0);
    struct tm* my_tm = localtime(&time_value);
    strftime(date_buff, sizeof(date_buff), "%d/%m/%yn", my_tm);
    std::cout << date_buff << std::endl;
    return 0;
}

time_t的类型不受C规范的保证。

Unix和posix兼容系统将time_t类型实现为有符号整数(通常为32或64位宽),表示从Unix纪元开始的秒数。因此,您可以执行以下操作

std::time_t my_time = static_cast<std::time_t>(unixtime);

但是,最好不要假设时间为int,而是用适当的时间处理替换时间函数,并返回std::time_tstruct tm