1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

segundos a partir de 1970 para data?

Discussão em 'Programação' iniciada por lealoureiro13, 3 de Janeiro de 2008. (Respostas: 15; Visualizações: 2354)

  1. lealoureiro13

    lealoureiro13 Power Member

    Alguém me pode ajudar a fazer um algoritmo em C que converta um numero inteiro em segundos a partir de 1970 para um data com a seguinte estrutura:


    {
    int seg;
    int mm;
    int hh;
    int dd;
    int mm;
    int ano;

    }

    Cumps...
     
  2. DarkVenger

    DarkVenger Power Member

    Tens de usar o time ou podes usar por exemplo o ctime?? (man 3 ctime <-- para mais informações)
     
  3. theforbidden1

    theforbidden1 Banido

    a maior dificuldade está em obteres quais os anos bissextos...

    mas onde está a dificuldade? não sabes fazer divisões inteiras?
     
  4. Baderous

    Baderous Banido

    (ano%4==0) -> Bissexto
     
  5. Xikinho90

    Xikinho90 Power Member

    Simples, fazes um contador eu fiz a pouco tempo uma coisa parecida, mas contava dias.. dá trabalho, mas é simples... de se fazer..
     
  6. HecKel

    HecKel The WORM

    1900%4 == 0 != bissexto :P

    Os múltiplos de 100 só são bissextos se também forem múltiplos de 400 ;)
     
  7. theforbidden1

    theforbidden1 Banido


    Pouca gente sabe isto
     
  8. HecKel

    HecKel The WORM

    Quando se estuda um algoritmo convém garantir que o mesmo não tem falhas, como tal, testa-se bastantes vezes a ver se falha em alguma situação ;)

    Mas nada que uma pesquisa não confirme tudo ;)
     
  9. Baderous

    Baderous Banido

    Nice, não sabia desta. :001:
     
  10. mj2p

    mj2p I'm Cool Cuz I Fold

    Para reforçar o que foi dito pelo Heckel acerca dos anos bissextos apresento aqui uma citação do livro Programação em C++ - Conceitos Básicos e Algoritmos -, dos autores Pimenta Rodrigues, Pedro Pereira e Manuela Sousa, editora FCA (mais informações sobre o mesmo consultar isto).

    Seja x o ano em questão. x será bissexto sse (se e só se):

    x%4==0 e x%100!=0;
    OU
    x%100==0 e x%400==0;


    Pensando no ano que agora começa (2008):
    2008%4==0 e 2008%100!=0; (é bissexto)


    Pensando no ano 2000:
    2000%4==0 e 2000%100==0; (por esta não é bissexto)
    2000%100==0 e 2000%400==0; (mas por esta é bissexto)


    Como se trata de uma condição do tipo OU (ou múltiplo de 4 e não múltiplo de 100 OU múltiplo de 100 e múltiplo de 400), desde que uma das premissas da condição seja verdadeira, toda a condição será verdadeira (daí que no exemplo do ano 2000 baste a 2.ª condição para se considerar o ano bissexto).

    Espero ter esclarecido quem necessitava.

    Vá, cumps
     
  11. slack_guy

    slack_guy Power Member

  12. OubeLa

    OubeLa Power Member

    Código:
    bool anoBissexto(Data data)
    {
        bool bi = false;
    
        //esta é a condição para um ano ser bissexto.
        if (data.getAno() % 400 == 0 || data.getAno() % 4 == 0 && data.getAno() % 100 != 0)
            bi = true;
    
        return bi;
    }
    
    Fica aqui uma função que determina se um ano era bissexto ou não (em C++). Esta função recebia uma Data (criada com o construtor da Classe Data) e retornava true se fosse bissexto.
     
  13. MadOnion

    MadOnion Folding Member

    Código:
    #include <stdio.h>
    #include <time.h>
    
    int main (void) {
    
    //O tempo em segundos desde 1 JAN 1970 00:00:00 ate este momento
    printf ("%d\n", time((time_t*)NULL));
    
    //Um apontador time_t com o mesmo tempo(uns milesimos de segundo adiantado, dependendo do processador)
    time_t t = time((time_t*)NULL);
    
    //Uma struct tm que ja existe da biblioteca do c
    struct tm tempo;
    
    /* Composicao da struct tm
    struct tm {
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;
    int tm_yday;
    int tm_isdst;
    }
    */
    
    //Converter para uma struct tm, um time_t
    tempo = *localtime_r(&t, &tempo);
    
    //guardar para uma string um output desejado
    char str[40];
    strftime(str, (sizeof(char)*40),"DATA: \t%d-%m-%y \nHORA: \t%H:%M:%S",&tempo);
    
    printf("%s\n", str);
    return 0;
    }
    
    Um pequeno programa que fiz, pode ser que ajude a perceber os tempos.
    Se tiveres duvidas nas funções, é so fazer man funcao.

    Cumps ;)
     
    Última edição: 4 de Janeiro de 2008
  14. lealoureiro13

    lealoureiro13 Power Member

    Obrigado pela ajuda! A Função de verificar os anos bissextos ajudou muito....


    Cumps...
     
  15. lealoureiro13

    lealoureiro13 Power Member

    Pessoal fiz aqui a minha funcção em C para converter segundos a partir de 1970 em um data.

    Tá um pouco grande mas penso que funca. Vejam se tá tudo ok e se pode melhorar alguma coisa.


    Cumps...

     
  16. MadOnion

    MadOnion Folding Member

    Chegaste a correr o código que postei acima, ou não te deste ao trabalho? Ou não percebeste? Ou não faz aquilo que queres?

    Eu só me dei ao trabalho de ler a tua função na diagonal, mas está extremamente confusa, e imensamente gigante.
    Cumps.
     

Partilhar esta Página