http://www.syslog.cc/ietf/drafts/draft-ietf-syslog-protocol-23.txt방법 시스템 로그 타임 스탬프
6.2.3.1을 구문 분석합니다. 위 링크의 예제은 타임 스탬프 형식이 다른 예를 제공합니다.
C
에서 어떻게 이러한 타임 스탬프를 구문 분석 할 수 있습니까?
즉석에서 모든 유형의 메시지가 도착할 수 있으며이를 구문 분석 할 수 있기를 원합니다.
http://www.syslog.cc/ietf/drafts/draft-ietf-syslog-protocol-23.txt방법 시스템 로그 타임 스탬프
6.2.3.1을 구문 분석합니다. 위 링크의 예제은 타임 스탬프 형식이 다른 예를 제공합니다.
C
에서 어떻게 이러한 타임 스탬프를 구문 분석 할 수 있습니까?
즉석에서 모든 유형의 메시지가 도착할 수 있으며이를 구문 분석 할 수 있기를 원합니다.
날짜 형식은 같은 문자열을 제공 RFC3339의 엄격한 버전 '2011-08-18T23는 : 31 : 42Z'에서
나는 strptime 기능이 시간대 지정자를 해결할 수있는 확실하지 않다 (Z 위의 시간 문자열), 그래서 당신 자신의 함수 안에서 그것을 다루기가 더 쉬울 수도 있습니다. struct tm이 그들을 처리하지 않기 때문에 분수 초를 처리 할 수 없습니다. 필요할 경우 struct timespec을 사용하여 소수 초를 저장할 수 있습니다.
당신은 strptime를 사용하여 형식의 대부분을 구문 분석 할 수 있습니다 :이 다음
struct tm tm;
time_t t
char *extra;
extra = strptime(tmstr, "%C%y-%m-%dT%H:%M:%S", &tm);
tm.tm_isdst = -1;
t = mktime(&tm);
는, 추가 입력 tmstr의 나머지 될 것입니다. 이것은 소수 초를 포함 할 수 있으며 시간대 형식을 포함합니다. 여분이 '.' 단지
strtod
기능 수를 구문 분석 :
if(extra && extra[0] == '.')
{
char *endptr;
fraction = strtod(extra, &endptr);
extra = endptr;
/* use timespec if fractional seconds required */
struct timespec ts;
ts.tv_sec = t;
ts.tv_nsec = fraction * 1000000000;
}
그런 다음 추가 지금 바로 시간대 지정자를 포함합니다. 'Z'이면 mktime이 UTC 시간을 제공하기 때문에 완료되었습니다. 그렇지 않으면 오프셋이 표시됩니다. +03 : 00이므로 시간/분 단위로 시간을 수정해야합니다.
고맙습니다. 이것은 완벽 해. 난'time_t'으로 유지하는 시간에'+03 : 00'을 추가하는 방법을 알아야합니다. – hari
알겠습니다. 나는 진심으로 당신의 도움에 감사드립니다. – hari
'struct timespec'은'double'보다 타임 스탬프를 저장하는 더 좋은 방법입니다. 후자는 시간이 흐르면서 정밀도를 잃어 버리고 일부 기본 2 분수 형식이 아닌 거의 확실하게 마이크로 초 또는 나노초 단위의 "원래 값"을 정확히 표현할 수 없습니다. –