Sei sulla pagina 1di 15

Tcnico em Informtica

Estrutura de Dados

Data e Hora do Sistema


Alex Helder Cordeiro de Oliveira
Instituto Federal de Braslia -

Campus

Braslia

2 semestre de 2013

Alex Helder (IFB)

EDD - Data e Hora

2013/2

1 / 15

Representao de horrio no sistema

Precisa da biblioteca

<time.h>.

Atravs de uma varivel do tipo

time_t .

Armazena a quantidade de segundos desde 01 de janeiro de 1970.


Se valor for negativo, ento a data anterior a 1970.
Atravs de um

struct tm.

Permite encontrar os diversos campos que formam nossas datas.

time_t
typedef

basicamente uma varivel do tipo long qual foi dado um

Alex Helder (IFB)

EDD - Data e Hora

2013/2

2 / 15

struct tm

campo

signicado

valores

tm_sec

segundos

[0, 59]

tm_min

minutos

[0, 59]

tm_hour

horas

[0, 23]

tm_mday

dia do ms

[1, 31]

tm_mon

ms

[0, 11]

tm_year

ano (desde 1900)

tm_wday

dia da semana

[0, 6]

tm_yday

dia do ano

[0, 365]

tm_isdst

horrio de vero

Alex Helder (IFB)

EDD - Data e Hora

2013/2

3 / 15

Funo

time()

Retorna uma varivel

time_t

com o horrio atual do sistema em

GMT.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv) {
time_t horario = time(NULL);
printf("Quantidade de segundos desde 1970: %d.\n", horario);
long seg = horario%60;
long min = (horario/60)%60;
long hora = (horario/3600)%24;
printf("Hora atual (GMT): %02d:%02d:%02d.\n", hora, min, seg);
return(EXIT_SUCCESS);
}
Alex Helder (IFB)

EDD - Data e Hora

2013/2

4 / 15

Converso de

time_t

Se faz pela funo

para

struct tm

localtime().

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main() {
time_t horario = time(NULL);
struct tm *h = localtime(&horario);
printf("data: %02d/%02d/%04d; hora: %02d:%02d:%02d\n",
h->tm_mday, h->tm_mon+1, h->tm_year+1900,
h->tm_hour, h->tm_min, h->tm_sec);
return(EXIT_SUCCESS);
}

Veja que esta converso j utiliza o horrio local, no mais o GMT.


Alex Helder (IFB)

EDD - Data e Hora

2013/2

5 / 15

Converso de

struct tm

para

time_t

Para criar um horrio do sistema a partir de uma data e horrio


pr-denidos (ou denidos pelo usurio).
Usamos a funo

mktime();

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main() {
struct tm agenda;
agenda.tm_mday = 1;
agenda.tm_mon = 3;
agenda.tm_year = 2012-1900;
time_t hora = mktime(&agenda);
if(hora < time(NULL)) printf("Data j passou!");
else printf("Data ainda no passou!");
return(EXIT_SUCCESS);
}
Alex Helder (IFB)

EDD - Data e Hora

2013/2

6 / 15

Apresentao Personalizada de Datas e Horrios

Diversas formas de se mostrar as datas podem ser encontradas pela


funo

strftime();

Atravs desta funo, podemos escrever em um string as informaes


de data e horrio formatadas.
Os argumentos so, respectivamente:
1

3
4

O string (array de char) onde vou gravar a string com as informaes


formatadas;
Espao alocado (ou tamanho mximo, pode ser uma outra forma de
interpretar o signicado) para esta string;
O string com os cdigos de formato para as informaes;
A varivel do tipo struct tm da qual sero colhidas as informaes.

Alex Helder (IFB)

EDD - Data e Hora

2013/2

7 / 15

OFF-Topic:

Locale

Para que as informaes de dadas em formato textuais apaream em


portugs, podemos usar a funo

<locale.h>.

setlocale()

da biblioteca

Esta funo tem dois argumentos:


1

tipo de informao que ser ajustada;


LC_ALL;
LC_COLLATE;
LC_CTYPE;
LC_MONETARY;
LC_NUMERIC;
LC_TIME.

Contexto geopoltico. Para saber quais opes esto disponveis,


verique a documentao do seu compilador.

setlocale (LC_ALL, "Portuguese");


setlocale (LC_ALL, "pt_BR.UTF8");

Ex (Windows):
Ex (Linux):
Alex Helder (IFB)

EDD - Data e Hora

2013/2

8 / 15

Funo

strftime()

- Cdigos de Formato

Cdigo Informao formatada


%a

Dia da semana abreviado

%A

Dia da semana completo

%b

Ms abreviado

%B

Ms completo

%c

data e hora padro

%C

Primeiros dois dgitos do ano

%d

Dia do ms numrico

%D

Data no formato: DD/MM/YY

%e

Dia do ms numrico (com dois dgitos)

%F

Data no formato: YYYY-MM-DD

%g

ltimos dois dgitos do ano

%G

Ano (com 4 dgitos)

Alex Helder (IFB)

EDD - Data e Hora

2013/2

9 / 15

Funo

strftime()

- Cdigos de Formato

Cdigo Informao formatada


%h

Ms abreviado

%H

Hora (0-23)

%I

Hora (1-12)

%j

Dia do ano numrico

%m

Ms numrico

%M

Minuto

%n

Quebra de linha

%p

AM / PM

%r

Hora no formato: HH:MM:SS (com hora entre 1-12)

%R

Hora no formato: HH:MM (com hora entre 0-23)

%S

Segundos

%t

Tabulao horizontal

Alex Helder (IFB)

EDD - Data e Hora

2013/2

10 / 15

Funo

strftime()

- Cdigos de Formato

Cdigo Informao formatada


%T

Hora no formato: HH:MM:SS (com hora entre 0-23)

%u

Dia da semana numrico (segunda o primeiro dia)

%U

Semana do ano

%V

Semana do ano (segunda o primeiro dia)

%w

Dia da semana numrico (domingo o primeiro dia: `0')

%W

Semana do ano (segunda o primeiro dia)

%x

Data padro

%X

Hora padro

%y

Ano numrico (dois ltimos dgitos)

%Y

Ano numrico (quatro dgitos)

%z

Diferena do UTC

%Z

Nome do fuso

%%

Smbolo de porcentagem

Alex Helder (IFB)

EDD - Data e Hora

2013/2

11 / 15

Funo

strftime()

#include
#include
#include
#include

<stdio.h>
<stdlib.h>
<time.h>
<locale.h>

int main(int argc, char** argv) {


setlocale (LC_ALL, "pt_BR.UTF8");
time_t horaSistema = time(NULL);
struct tm *horaEstrutura = localtime(&horaSistema);
char string[80];
strftime(string, 100, "Hoje %A, dia %d de %B de %Y.
Agora so %T.", horaEstrutura);
printf("%s", string);
return(EXIT_SUCCESS);
}
Alex Helder (IFB)

EDD - Data e Hora

2013/2

12 / 15

Diferena de tempo
Para se calcular uma diferena entre dois tempos diferentes (time_t),
podemos usar a funo

difftime().

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv) {
time_t horaInicial = time(NULL);
int i;
int soma = 0;
for(i = 0; i < 20000; i++) {
printf("Resultado parcial da soma: %d\n", soma);
soma += i;
}
printf("Resultado final da soma: %d\n", soma);
time_t horaFinal = time(NULL);
double diferenca = difftime(horaFinal, horaInicial);
printf("A execuo desta funo levou %f segundos.\n", diferenca);
return(EXIT_SUCCESS);
}
Alex Helder (IFB)

EDD - Data e Hora

2013/2

13 / 15

Contagem de ciclos do processador

Para a contagem de tempo mais precisa, pode-se usar a funo

clock().
Ela conta a quantidade de ciclos do processador desde o incio do
programa.
Se quiser obter a quantidade de segundos, divida pelo valor
 CLOCKS_PER_SEC.

CLOCKS_PER_SEC

Alex Helder (IFB)

contm a taxa de processamento da mquina.

EDD - Data e Hora

2013/2

14 / 15

Contagem de ciclos do processador

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv) {
int i,j;
int soma = 0;
for(i = 0; i < 100000; i++) {
for(j = 0; j < 100000; j++) {
soma += i*j;
}
}
clock_t ciclos = clock();
int segundos = ciclos/CLOCKS_PER_SEC;
printf("Ciclos: %d.\n", CLOCKS_PER_SEC);
printf("Ciclos: %d.\n", ciclos);
printf("Segundos: %d.\n", segundos);
return(EXIT_SUCCESS);
}
Alex Helder (IFB)

EDD - Data e Hora

2013/2

15 / 15

Potrebbero piacerti anche