Bifes Head
#include bifehead.h
Tipos importantes
Para armazenar o tempo, so definidos alguns tipos de dados e estruturas no arquivo de cabealho time.h. So estes: time_t : Um inteiro com sinal (32 ou 64 bits) que armazena o nmero de segundos desde a criao do Unix: meia-noite de 1 de Janeiro de 1970 UTC (com exceo dos segundos bissextos). struct tm : Contm a data e hora separados em 9 campos do tipo int : 1 2 3 4 5 s t r u c tt m { i n tt m _ s e c ;/ *S e g u n d o s ,0 5 9 * / i n tt m _ m i n ;/ *M i n u t o s ,0 5 9 * / i n tt m _ h o u r ;/ * H o r a s0 2 3* / i n tt m _ m d a y ;/ * d i ad om s ,1 3 1* /
1/16
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
20/2/2014
6 7 8 9 1 0 1 1
clock_t : Este tipo capaz de armazenar ciclos de mquina e suporta clculos aritmticos. Muito til em conjunto com a macro CLOCKS_PER_SEC. CLOCKS_PER_SEC : Na verdade, este no um tipo de dados, mas sim uma macro que armazena quantos ciclos de mquina so necessrios para atingir 1 segundo.
As funes
Finalmente chegamos na parte legal. =D Para melhor organizao, separei esta seo em 2 tipos de funes com objetivos parecidos: manipulao de tempo e converso de tipos.
Manipulao de tempo
time
time_t time( time_t *timer); Pega a hora atual do sistema e a armazena numa varivel do tipo time_t , passada como parmetro. Se voc passar um ponteiro nulo (NULL), ela retorna o valor. Caso acontea algum problema, o valor de retorno ser -1. Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h > i n tm a i n ( v o i d ) { t i m e _ ts e g u n d o s ; s e g u n d o s =t i m e ( N U L L ) ; p r i n t f ( " % l dh o r a sd e s d e1d eJ a n e i r od e1 9 7 0 . \ n " ,s e g u n d o s / 3 6 0 0 ) ; } r e t u r n0 ;
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
2/16
20/2/2014
mktime
time_t mktime( struct tm *timeptr); Converte uma estrutura tm para time_t . Ao alterar um dos campos da estrutura, todos os outros so devidamente alterados para o seu valor correto, equivalente ao novo campo. O valor retornado um time_t referente a estrutura. Em caso de problemas, ser retornado o valor -1. Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 / * L eu m ad a t aei m p r i m eod i ad as e m a n ar e f e r e n t eam e s m a . F o iu s a d aaf u n c a ol o c a l t i m e ( ) ,e l ac o n v e r t eu mv a l o rt i m e _ te m u m ae s t r u t u r at m .F a l a r e m o sd e l am a i st a r d e . * / # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h >
i n tm a i n ( v o i d ) { t i m e _ tc u r r e n t T i m e ; s t r u c tt m* t i m e i n f o ; i n td i a ,m e s ,a n o ; c h a r* d i a S e m a n a [ ] ={" D o m i n g o " ," S e g u n d a " ," T e r c a " ," Q u a r t a " ," Q u i n t a "
/ *L eu m ad a t ap a r av e r i f i c a rod i ad as e m a n ac o r r e s p o n d e n t eae l a . * / p r i n t f ( " D i a :" ) ; s c a n f ( " % d " , & d i a ) ; p r i n t f ( " M e s :" ) ; s c a n f ( " % d " , & m e s ) ; p r i n t f ( " A n o :" ) ; s c a n f ( " % d " , & a n o ) ; / *P e g aah o r aa t u a ld os i s t e m aeac o n v e r t ee mu m ae s t r u t u r at m .* / t i m e ( & c u r r e n t T i m e ) ; t i m e i n f o =l o c a l t i m e ( & c u r r e n t T i m e ) ; / *A t u a l i z ao sv a l o r e sd i a ,m e sea n od ae s t r u t u r a .* / t i m e i n f o > t m _ m d a y =d i a ; t i m e i n f o > t m _ m o n =m e s-1 ; t i m e i n f o > t m _ y e a r =a n o-1 9 0 0 ;
/ *A t r a v e sd af u n c a om k t i m e ( ) ,a t u a l i z ao so u t r o sc a m p o sd ae s t r u t u r a c o mo sa t u a l i z a d o sa n t e r i o r m e n t e .* / m k t i m e ( t i m e i n f o ) ;
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
20/2/2014
4 2 4 3
r e t u r n0 ;
clock
clock_t clock(void); Retorna quantos ciclos de mquina se passaram desde o incio do programa. Muito til em conjunto com a macro CLOCKS_PER_SEC. Retorna -1 em caso de erros. Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h > v o i de s p e r a r ( i n ts e g u n d o s ) ; i n tm a i n ( v o i d ) { i n tx ; / *C o n t aa t e3 .* / p r i n t f ( " E us e ic o n t a r ! !V e j a : \ n " ) ; f o r( x = 1 ; x < = 3 ; x + + ) { p r i n t f ( " % d \ n " , x ) ; e s p e r a r ( 1 ) ;/ *E s p e r a1s e g u n d oa t ei rp a r aop r o x i m on u m e r o .* / } } r e t u r n0 ;
v o i de s p e r a r ( i n ts e g u n d o s ) { c l o c k _ tc i c l o F i n a l ;
difftime
double difftime(time_t time1, time_t time2);
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/ 4/16
20/2/2014
Calcula a diferena de segundos entre dois tempos. Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h > # i n c l u d e< s t r i n g . h > i n tm a i n ( v o i d ) { t i m e _ ti n i c i o ,f i m ; c h a rn o m e [ 5 1 ] ; i n i c i o =t i m e ( N U L L ) ; p r i n t f ( " D i g i t es e un o m e :" ) ; f g e t s ( n o m e ,5 1 ,s t d i n ) ; f i m =t i m e ( N U L L ) ; n o m e [ s t r l e n ( n o m e ) 1 ] =' ' ; p r i n t f ( " \ n % s ,v o c ed e m o r o u% . 2 fs e g u n d o sp a r ad i g i t a rs e un o m e . \ n " } r e t u r n0 ;
stime
int stime(time_t *timer); Altera a hora local do sistema para a correspondente ao valor do ponteiro timer . Retorna 0 em caso de sucesso e -1 em caso de algum erro. S pode ser executada pelo usurio root . Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 # i n c l u d e< s t d i o . h > # i n c l u d e< s t d l i b . h > # i n c l u d e< t i m e . h > i n tm a i n ( v o i d ) { t i m e _ tc u r r e n t T i m e ,n e w T i m e ; s t r u c tt m* t i m e i n f o ; i n th o u r s ,m i n u t e s ; / *L en o v ah o r aem i n u t o s .* / p r i n t f ( " H o r a s :" ) ; s c a n f ( " % d " , & h o u r s ) ; p r i n t f ( " M i n u t o s :" ) ; s c a n f ( " % d " , & m i n u t e s ) ;
5/16
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
20/2/2014
1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8
/ *T r a n s f o r m aae s t r u t u r ae mu mt i m e _ t .* / i f( ( n e w T i m e =m k t i m e ( t i m e i n f o ) )<0 ) { f p r i n t f ( s t d e r r , " \ n * * E R R Oa oc o n v e r t e rs t r u c tt m *p a r at i m e _ t . * * \ n " e x i t ( 1 ) ; } e l s e { i f( s t i m e ( & n e w T i m e )<0 ) {/ *S e t aan o v ah o r al o c a l .* / f p r i n t f ( s t d e r r , " \ n * * E R R Oa os e t a rn o v ah o r al o c a l . * * \ n " ) ; f p r i n t f ( s t d e r r , " P r o v a v e l m e n t ev o c en a op o s s u ip e r m i s s a op a r aa l t e r f p r i n t f ( s t d e r r , " T e n t ec o m ou s u a r i or o o t . \ n " ) ; e x i t ( 1 ) ; } } / *O b t e mn o v a m e n t eah o r al o c a lp a r am o s t r a l an as a i d ap a d r a o .* / c u r r e n t T i m e =t i m e ( N U L L ) ; t i m e i n f o =l o c a l t i m e ( & c u r r e n t T i m e ) ; h o u r s =t i m e i n f o > t m _ h o u r ; m i n u t e s =t i m e i n f o > t m _ m i n ; p r i n t f ( " N o v ah o r al o c a l :% 0 2 d : % 0 2 d \ n " , h o u r s , m i n u t e s ) ; } r e t u r n0 ;
Converso de tipos
localtime
struct tm *localtime( time_t *timer); Converte um valor do tipo time_t em uma estrutura tm . A estrutura alocada estticamente e compartilhada pelas funes localtime() e gmtime(). Exemplo: 1 2 # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h >
6/16
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
20/2/2014
3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9
i n tm a i n ( v o i d ) { t i m e _ tc u r r e n t T i m e ; s t r u c tt m* t i m e i n f o ; / *P e g aah o r aa t u a ld os i s t e m a .* / c u r r e n t T i m e =t i m e ( N U L L ) ; / *C o n v e r t e oe mu m ae s t r u t u r at m .* / t i m e i n f o =l o c a l t i m e ( & c u r r e n t T i m e ) ;
asctime
char *asctime (const struct *tm timeptr); Converte uma estrutura do tipo tm em uma string com o seguinte formato: W w wM m md dh h : m m : s sy y y y Onde Www o dia da semana, Mmm o ms, dd o dia do ms, hh:mm:ss a hora local e yyyy o ano. A string terminada com um caractere de nova linha (\n) seguido de um caractere nulo. Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h > i n tm a i n ( v o i d ) { t i m e _ tc u r r e n t T i m e ; s t r u c tt m* t i m e I n f o ; / *P e g aah o r aa t u a ld os i s t e m aec o n v e r t e ae mu m ae s t r u t u r at m .* / c u r r e n t T i m e =t i m e ( N U L L ) ; t i m e I n f o =l o c a l t i m e ( & c u r r e n t T i m e ) ; / *C o n v e r t eae s t r u t u r ae mu m as t r i n gei m p r i m eam e s m a .* / p r i n t f ( " % s " ,a s c t i m e ( t i m e I n f o ) ) ; } r e t u r n0 ;
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
7/16
20/2/2014
gmtime
struct tm *gmtime(const time_t *timer); Constri uma estrutura do tipo tm a partir do valor passado como parmetro. A diferena est no formato, que ser expressado em UTC ou GMT. tima para construir tabelas de fuso-horrios. Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h > # d e f i n eB R A Z I L( 3 ) # d e f i n eC H I N A( + 8 ) i n tm a i n ( v o i d ) { t i m e _ tc u r r e n t T i m e ; s t r u c tt m* u t c T i m e ; c u r r e n t T i m e =t i m e ( N U L L ) ; / *C o n v e r t eah o r aa t u a lp a r aU T C .* / u t c T i m e =g m t i m e ( & c u r r e n t T i m e ) ;
ctime
char *ctime( const time_t *timer); Esta funo equivalente asctime().
strftime
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/ 8/16
20/2/2014
size_t strftime( char *ptr, size_t maxsize, const char *format, const struct tm *timeptr); Copia na string ptr o contedo de format , interpreta algumas tags de formato similares as da funo printf() de acordo com a estrutura timeptr , com o limite de maxsize caracteres. Pra falar a verdade esta funo extremamente parecida com a funo sprintf(). Voc vai escrever em uma string utilizando alguns cdigos de formato a mais. Uma lista com todos os cdigos pode ser encontrada aqui. Exemplo: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 Ufa! =P Finalmente. Obrigado a todos. No se esqueam de comentar, muito importante para o crescimento do blog. Abraos. # i n c l u d e< s t d i o . h > # i n c l u d e< t i m e . h > i n tm a i n ( v o i d ) { t i m e _ tc u r r e n t T i m e ; s t r u c tt m* t i m e i n f o ; c h a rs t r i n g T i m e [ 5 1 ] ; c u r r e n t T i m e =t i m e ( N U L L ) ; t i m e i n f o =l o c a l t i m e ( & c u r r e n t T i m e ) ; / *C r i aas t r i n gc o mo sc o d i g o sd ef o m a t a c a on of o r m a t o : d i a / m e s / a n o-h o r a : m i n u t o : s e g u n d oA M / P M .* / s t r f t i m e ( s t r i n g T i m e ,5 1 ," % d / % m / % Y-% H : % M : % S% p " ,t i m e i n f o ) ; / *I m p r i m eas t r i n gf o r m a t a d a .* / p r i n t f ( " % s \ n " , s t r i n g T i m e ) ; } r e t u r n0 ;
Referncias
http://www.cplusplus.com/ http://www.cppreference.com/index.html http://linux.about.com/library/cmd/blcmdl2_stime.htm
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
9/16
20/2/2014
http://www.vivaolinux.com.br/dicas/verDica.php?codigo=1008
Esta entrada foi publicada em abril 16, 2008 s 3:02 am e arquivado em Programao. Etiquetado: C, Programao, time.h. Voc pode acompanhar qualquer resposta para esta entrada atravs de RSS 2.0 feed. Voc pode deixe uma resposta, ou Trackback do seu prprio site.
1.
Mauricio disse
maio 8, 2008 s 5:17 pm Muito bom ! Aprendi bastante . Resposta
2.
ravi disse
junho 19, 2008 s 11:36 pm ei brother. Vlw cara vc ajudou bastante. luz Resposta
3.
Felipe disse
10/16
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
20/2/2014
outubro 5, 2008 s 1:17 pm timo, mas como faz deixar o tempo correndo enquanto o programa roda? Resposta
4.
Felipe disse
outubro 12, 2008 s 2:35 am Thank you! great post! Resposta
5.
Alan disse
novembro 5, 2008 s 2:24 pm Otimo post!!! vai ajudar e mto a minha vida..>!! parabens!! Resposta
6.
Helkier disse
maio 19, 2009 s 9:37 pm Cara, otimo post eim Isso vai me quebrar um galho, pois eu j tava doido Agora sim consigo manipular o tempo do jeito que eu quiser, assim termino meu projeto mais rpido! Meus Parabens!! :D Resposta
7.
Jo_Spider disse
agosto 5, 2009 s 5:48 pm Como fao para receber a horas, somalas e depois calcular a diferena entre elas????????????? Agradeo a juda!!! :D
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
11/16
20/2/2014
Resposta
8.
Andr disse
setembro 9, 2009 s 4:24 pm cara, sou um zero esquerda em programo, to tentando aprender sozinho. mas o que eu queria era o seguinte, perguntar a data de nascimento e armazenar numa variavel. depois pegar a data atual e subtrair da data que foi armazenada, descobrindo assim quantos dias a pessoa viveu. se puderem me ajudar agradeo: andreluis.felizardo@hotmail.com abraos Resposta
9.
walter disse
outubro 16, 2009 s 3:38 pm obrigado irmo!!!! Resposta
10.
11.
Rafael disse
maio 18, 2010 s 11:26 am Muuito bom!!! E, como j disseram: Um cdigo fonte vale mais que 1000 palavras!!! hehehe Resposta
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
12/16
20/2/2014
12.
13.
14.
Rafael disse
julho 29, 2010 s 5:04 pm Rapaz, impressionante mesmo O que mais gosto na linguagem C que ela convida agente para entender no s o funcionamento da linguagem mas o funcionamento de tudo que computacional (eu ficava pensando como uma mquina gerava nmeros aleatoariamente ou ento contava o tempo), apesar de que algumas coisas ainda no descobri valeus Resposta
15.
ts disse
outubro 26, 2010 s 10:26 pm Parabns, tudo o que eu tava procurando. Resposta
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
13/16
20/2/2014
16.
Andersdon disse
dezembro 8, 2010 s 5:32 pm Ta muito bom mas tem uns erros odne diz copia na verdade nao copia s faz referencia a hora atual. Resposta
17.
18.
Renato disse
setembro 24, 2011 s 2:57 am Parabns, amigo atigo criado em 2008 e ainda hoje tem grande serventia. Essa funo strftime matou a pau. Resposta
19.
Cassia disse
maro 18, 2012 s 9:50 pm Adorei. Se pudesse tirar s mais uma dvida. Como eu fao para receber a data do teclado e convert-la em um nmero inteiro? Resposta
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
14/16
20/2/2014
20.
eduardo disse
abril 10, 2012 s 12:36 am Achei os exemplos muito bons, mas ainda tenho uma dvida. Digamos que eu pegue o horrio do sistema Ex: 13:30:00, e eu presisa fazer um if para ver se o horrio maior que 12:00:00, (meio-dia), como fasso nesse caso? Agradeo des de ja :) Resposta
21.
maurcio disse
abril 14, 2012 s 12:29 am velhooooooooooooooooooooo !!!!!!!!!!!!!!!!!!!!!!! muito obrigado .. salvaste meu trabalho final de C !!! GRANDE ABRAO!! Resposta
22.
Lo disse
maio 1, 2012 s 11:08 pm Muito bom. Muito bem explicado. Me ajudou bastante. Resposta
23.
joao disse
maio 23, 2012 s 9:09 am belo tpico Resposta
24.
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
15/16
20/2/2014
http://bifehead.wordpress.com/2008/04/16/timeh-manipulando-o-tempo/
16/16