我有一个函数,它在unix时间内返回一个时间戳为int。
我需要在本地时间将此int转换为字符串dd/mm/yy
。 "本地"部分问题导致我出现问题,如果不是这样的话,我本可以让自己的功能转换它。
我已经搜索过了,似乎标准库中的ctime
类对此非常理想,就像这样:
int unixtime;
std::cout << std::asctime(std::localtime(unixtime));
可悲的是,只接受了*time_t
。有什么方法可以将int转换为这种格式,或者更好的方式从unix时间获取本地时间作为int?
答案 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_t
或struct tm