2009-12-07 6 views
10

날짜에 초를 추가해야합니다. 예를 들어 2009127000000과 같은 날짜가있는 경우이 날짜에 초를 추가해야합니다. 또 다른 예는 20091231235957에 50 초를 더합니다.날짜를 초로 추가하십시오.

C에서 가능한가요?

+0

합니다. 2009127000000은 12 월 7 일 또는 1 월 27 일 일 수 있습니다. – Thomas

+0

@benjamin, ctime (날짜/시간 변환 함수) 및 strptime (시간의 문자열 표현을 시간 tm 구조로 변환)의 맨 페이지를 읽습니다. – Glen

답변

7

C 날짜/시간 유형 time_t는 특정 날짜 이후의 초 수로 구현되므로 초를 추가하려면 단순히 일반 산술을 사용하십시오. 이것이 당신이 요구하는 것이 아니라면 질문을 명확하게하십시오.

+16

'time_t '는 일반적으로 초이지만 반드시 그런 것은 아닙니다. –

7

<time.h>의 유형 및 기능을 사용하십시오.

time_t now = time(0); 
time_t now_plus_50_seconds = now + 50; 
time_t now_plus_2_hours = now + 7200; 

<time.h>time_tstruct tm 종류의 처리 기능을 선언합니다. 이 기능들은 당신이 원하는 모든 것을 할 수 있습니다.

+0

해답이되어야합니다. 깨끗하고 깨끗하며 훌륭한 예가 있습니다. +1 – MyDaftQuestions

+0

POSIX 2016에서''업데이트 : http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/time.h.html – pmg

19

POSIX에서 time_t 값은 초로 지정되어 있지만 C 표준에서는 보장되지 않으므로 POSIX가 아닌 시스템에서는 true가 아닐 수 있습니다. 일반적으로 (사실, 얼마나 자주 초를 나타내는 값이 아닌지 잘 모르겠습니다).

#include <time.h> 
#include <stdio.h> 

int main() 
{ 
    time_t now = time(NULL); 

    struct tm now_tm = *localtime(&now); 


    struct tm then_tm = now_tm; 
    then_tm.tm_sec += 50; // add 50 seconds to the time 

    mktime(&then_tm);  // normalize it 

    printf("%s\n", asctime(&now_tm)); 
    printf("%s\n", asctime(&then_tm)); 

    return 0; 
} 

적절한로 시간 문자열을 구문 분석 : 여기

time_t 정말 조작 시간에 특히 좋은하지 않는 표준 라이브러리 기능을 사용하여 초를 나타냅니다지지 않습니다 시간 값을 추가하는 예입니다 struct tm 변수는 연습으로 남겨 둡니다. strftime() 함수를 사용하여 새로운 형식을 지정할 수 있습니다 (POSIX strptime() 함수는 구문 분석에 도움이됩니다).

+1

수정 된'then_tm'에서'time_t'을 어떻게 되 찾을 수 있습니까? – Lazer

+2

@Lazer :'mktime'은 당신이 원하는'time_t'를 반환합니다. –

+0

@Michael Burr. 이것은 seconds가 60보다 작 으면 true 일 것입니다. 그렇지 않으면 당신은 스스로 계산 전체를해야합니다. – abhi

1

하면이 같은 시도하지 : (참고 : 확인 오류) 나는 당신의 예에서 날짜 형식이 underspecified 생각

include <time.h> 

char* string = ...; 
char buf[80]; 
struct tm; 
strptime(string, "%Y%m...", &tm); 
tm->tm_isdst = 0; 
strftime(buf, sizeof(buf), "%Y%m...", localtime(mktime(&tm) + 50)); 
관련 문제