utc 시간을 현지 시간으로 변환하는 방법은 무엇입니까?UTC에서 ANSI C 로의 시간?
답변
tzset()과 time/gmtime/localtime/mktime 함수를 함께 사용해야합니다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
time_t makelocal(struct tm *tm, char *zone)
{
time_t ret;
char *tz;
tz = getenv("TZ");
setenv("TZ", zone, 1);
tzset();
ret = mktime(tm);
if(tz)
setenv("TZ", tz, 1);
else
unsetenv("TZ");
tzset();
return ret;
}
int main(void)
{
time_t gmt_time;
time_t local_time;
struct tm *gmt_tm;
gmt_time = time(NULL);
gmt_tm = gmtime(&gmt_time);
local_time = makelocal(gmt_tm, "CET");
printf("gmt: %s", ctime(&gmt_time));
printf("cet: %s", ctime(&local_time));
return 0;
}
기본적으로,이 프로그램은 GMT (시간 (NULL))와 같은 현재 컴퓨터의 일이 소요되며, CET로 변환 :
이 시도
$ ./tolocal
gmt: Tue Feb 16 09:37:30 2010
cet: Tue Feb 16 08:37:30 2010
M. 마리의 대답은 않습니다 실제로 제기 된 질문에 대해 작동하지 않습니다. tzset()은 POSIX이지만 원래 질문의 제목이 ANSI C가 아닙니다. C90 또는 C99 (초안 표준 검색에서 최종 표준에 액세스 할 수 없음)에 대해서는 언급이 없습니다.
OP의 질문은 아마도 "utc time"이 의미하는 바가 분명하지 않기 때문에 아마도 다소 모호합니다. 아마도 그는 깨진 구성 요소를 의미 할 것입니다. struct tm
으로 채워 보겠습니다.
strftime("%z",...)
의 출력을 구문 분석하여 C99에서 로컬 TZ의 오프셋을 확인할 수 있습니다.이 오프셋은 시간이 지남에 따라 변경되므로 사용자 고유의 날짜 값으로 호출해야합니다. 그러나이 포맷 코드는 C90에서 사용할 수 없으므로 strftime("%Z",...)
의 출력을 구문 분석하려고하지 않는 한 AF90에서 C90을 준수해야한다면 AFAIK를 사용할 수 있습니다.하지만 기본적으로 이식 할 수 없습니다.
을 사용하면 mktime()
을 사용하여 UTC 구성 요소를 현지 표준 시간대로 해석 할 수 있습니다. 그런 다음 오프셋을 적용하고 localtime()
을 사용하여 분류 된 구성 요소로 다시 변환하십시오. 로컬 표준 시간대가 DST로 또는 DST로 전환 될 때 (또는 적용되는 경우 시간대 오프셋이 변경된 시점)에는 가장자리 상황에 처할 수 있지만 DST를 사용하지 않는 로캘로 이동하면 쉽게 피할 수 있습니다. tm_dst
을 0
으로 설정하면 strftime()
과 mktime()
을 모두 호출 할 수 있습니다.
또는 ANSI C로 제한하지 마십시오.
- 1. JAVA UTC에서 긴 UTC 시간 소인
- 2. ANSI C 그래픽 확장
- 3. ANSI C 분할 문자열
- 4. UTC에서 Unix Timestamp로 변환
- 5. UTC에서 사용자의 현지 시간으로
- 6. Maple에서 C++ 로의 번역
- 7. Eclipse에서 ANSI C 표준 적용하기
- 8. ANSI C 2 레벨 포함
- 9. ANSI C 구현의 HAT-trie?
- 10. ansi c : argv를 int로 변환
- 11. Ansi C & C++ 무료 전자 도서 다운로드
- 12. 자바의 ResultSet 방법 UTC에서 getTimeStamp하는
- 13. C++에서 PHP 로의 변환
- 14. C#에서 vb.net 로의 변환
- 15. PHP에서 C++ 로의 번역을 위해
- 16. C#에서 C++ 로의 콜백 함수
- 17. C#에서 C++ 로의 변환, 컨테이너 다루기
- 18. ANSI C 용 비트 조작 라이브러리
- 19. Java에서 C++ (JNI)로 ANSI 문자열 전달
- 20. 함수 (ANSI C)를 통해 데이터 할당
- 21. ANSI C MultiPlatform 컴파일러 및 GUI
- 22. ANSI C 용 임베디드 VM 런타임
- 23. ansi-c. .pgm 사진을위한 High-Pass3 필터
- 24. ANSI C와 ISO C 사이에 차이점이 있습니까?
- 25. Apache를 구문 분석 할 때 Ansi C
- 26. ansi c 예기치 않은 문제가 있습니까?
- 27. emacs ansi-term 배경색
- 28. Matlab에서 C++ 로의 변환 속도 향상
- 29. int에서 UIBarStyle, objective-C++ 로의 변환이 잘못되었습니다.
- 30. C#에서 vb 로의 변환 개체 초기화