2

我有一个函数,它以 int 形式返回 unix 时间的时间戳。

我需要在本地时间将此 int 转换为字符串dd/mm/yy。“本地”部分给我带来了问题,如果不是这样,我本可以制作自己的函数来转换它。

我四处搜索,似乎ctime标准库中的类非常适合这个,方式如下:

int unixtime;

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

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

4

5 回答 5

1

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

time_t ts = unixtime;
std::cout << std::asctime(std::localtime(&ts));
于 2014-05-30T09:03:02.923 回答
0
'/* 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 它会给你时间。

于 2014-05-30T09:05:08.860 回答
0

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

来源

于 2014-05-30T09:05:45.200 回答
0

要以 dd/mm/yy 打印当前时间,您可以尝试以下操作:

#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/%y\n", my_tm);
    std::cout << date_buff << std::endl;
    return 0;
}
于 2014-05-30T09:08:13.400 回答
0

time_tC 规范不保证的类型。

Unix 和 POSIX 兼容系统将该time_t类型实现为带符号整数(通常为 32 或 64 位宽),表示自 Unix 纪元开始以来的秒数。所以你可以做以下

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

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

于 2014-05-30T09:14:11.910 回答