Unix时间为int到本地时间

时间:2014-05-30 08:56:20

标签: c++ time localtime ctime

我有一个函数,它在unix时间内返回一个时间戳为int。

我需要在本地时间将此int转换为字符串dd/mm/yy。 "本地"部分问题导致我出现问题,如果不是这样的话,我本可以让自己的功能转换它。

我已经搜索过了,似乎标准库中的ctime类对此非常理想,就像这样:

int unixtime;

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

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

5 个答案:

答案 0 :(得分:1)

根据定义,

time_t是算术类型,您可以这样做:

time_t ts = unixtime;
std::cout << std::asctime(std::localtime(&ts));

答案 1 :(得分: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类型,它会给你时间。

答案 2 :(得分:0)

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

<强>来源

答案 3 :(得分: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;
}

答案 4 :(得分:0)

C规范不保证time_t的类型。

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

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

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