UTC time을 정의하고 싶은데 어떻게 하죠?
글쓴이: munhoney / 작성시간: 금, 2012/04/20 - 1:01오후
쉬운 내용일것 같은데,, 잘 모르겠네용 @@
제가 하고 싶은것은 C로 UTC time을 만들고 싶은겁니다.
즉,
struct tm t;
t.tm_year = 2011-1900;
t.tm_mon = 1;
.....
이렇게 만들면 기본적으로 로컬 타임으로 설정되지요
하지만 제가 원하는 것은 이거 자체가 UTC 타임이었으면 좋겠는데,, 어떻게 하지요?
처음 생각했던 것은
t.tm_zone = "UTC" 이거인데 안되는것 같고..
두번째는 무슨 설정해주는 뭔가 있을 거라고 생각했는데, 못찾겠고...
혹시 방법이 있나요?
Forums:
KLDP니 리눅스맞죠?
CTIME(3) Linux Programmer’s Manual CTIME(3)
NAME
asctime, ctime, gmtime, localtime, mktime, asctime_r, ctime_r, gmtime_r, localtime_r - transform date and time
to broken-down time or ASCII
SYNOPSIS
#include
char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);
char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);
struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);
struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);
time_t mktime(struct tm *tm);
네 리눅스 맞습니다. 네 그 부분을 보긴했는데
네 리눅스 맞습니다.
네 그 부분을 보긴했는데
처음 제가 설정한 값이 UTC로 이해해주는 것은 없더군요. (제가 잘 몰라서 일수도 있지만. .. ㅡㅡ)
즉 localtime을 utc로 변환은 해줍니다.
그리고 제가 하고 싶은것은 struct tm 으로 인간이 쉽게 이해할 수 있는 값으로 가지고 있고, 그것 자체가 UTC이길 바랄뿐이지요..
---------------------------------
http://blog.naver.com/munhoney
---------------------------------
질문자가 뭔가 잘못 생각하시는것
질문자가 뭔가 잘못 생각하시는것 같은데요,
struct tm은 결국 연월일 시분초를 저장하기 위한 자료구조일 뿐이죠. 거기에 UTC이 들어있는지 localtime이 들어있는지는 개발자가 판단하고 결정하면 되는것 아닌가요?
int가 int hour; 가 될수도 있고 int year; 가 될수도 있는 것처럼, struct tm utc_now; 가 될지 struct tm local_now; 가 될지는 자유롭잖아요.
네 맞습니다. struct tm은 전혀 상관이
네 맞습니다.
struct tm은 전혀 상관이 없지요 하지만, 그 정보를 time_t로 변환하고자 하면 localtime과 utc time 구분이 필요해집니다.
그래서 제가 원하는 것은 time_t로 변환할 시 utc time으로 변환되어진 값을 구하고자 하는 겁니다.
---------------------------------
http://blog.naver.com/munhoney
---------------------------------
음 ..
struct tm 에 GMT+0 의 시간을 넣는 건, 단순히 gmtime() 을 호출하면 되니까, 이건 아닌 것 같고..;;
localtime 이 들어간 struct tm 을 timestamp 로 변환했을 때, 이 timestamp 가 UTC 이길 원하시는 거라면..
이건 epoch timestamp 맞으니까 역시 아닌것 같고..
모든 시간 데이터를 UTC 기준으로 처리하시려는 거라면, 시스템을 UTC 로 설정하는 수 밖에 없을 듯 싶네요.
time() 이나 gettimeofday() 를 통해 얻어온 시스템 시간은 UTC 기준의 timestamp 이지만..
시간 변환 함수들은 내부적으로 모두 tzset() 을 호출해서, tzname 의 값을 참조를 합니다.
결과적으로 현재 timezone 을 기준으로 데이터를 처리하기 때문에..
이걸 바꾸지 않고서는 모두 localtime 기준으로 처리될 수 밖에 없을 것 같네요.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기