2012-07-20 6 views
0

에포크 이후에 초 (x, x는 long long 데이터 타입)라고합니다. 나는 <ctime> 라이브러리를 사용하여 유닉스 시간으로 변환하고 싶다. 문제는 gmtime()의 time_t 변수가 작동하기를 원하며 으로 변환 된 x (long long)을 만들 수 없습니다.에포크 이후의 초를 유닉스 시간으로 변환하기

이 뭐하는 거지입니다 :

//x is number of seconds after epoch, I want that in unix time 
time_t t=x; 
printf("%s\n",asctime(gmtime(&t))); 

은 어떻게 든 time_tx을 타입 변환 할 수 있습니까?

답변

5

그냥 캐스팅 하시겠습니까?

time_t t = (time_t) x; 

그것은 상위 32 비트로 잘라하지만 당신이 정말로 64 비트 타임 스탬프를 필요로 할 때까지 당신은 여전히 ​​25 년 이상있다. :)

물론, 여러분의 신기원이 POSIX 신기원 (1970-01-01 00:00:00)과 같지 않은 경우 문제가있을 수 있습니다.

+0

사람들이 70 년대에 생각했던 것입니다.하지만 2000 년은 어쨌든 왔습니다. – Shahbaz

+2

'time_t' *는 에포크부터 초를 저장하는 타입입니다. 32 또는 64 비트 값이 라이브러리에 달려 있으므로 문제의 라이브러리를 처리합니다. 즉, 이것은 완벽하게 유효한 대답입니다. +1. – DevSolar

+1

@Shahbaz 알아, 나는 거기에 있었다! :) 고맙게도 저는 90 년대에 우리 팀이 이미 그 중 하나를 염두에두고 작업 수명을 충분히 늦게 입력했습니다. 그리고 그것은 또한 내가 내장 된 시간 유형과 함수를 사용하지 않는 이유이기도합니다. 그리고 나서'time_t'를 64 비트로 만들 때 내 코드가 작동하도록 다시 컴파일해야합니다. –

관련 문제