Newsgroup: it.comp.lang.c
Titolo: Conversione di date in formato "giuliano"

Ciao a tutti.
Voglio scrivere un programma che prende in input una data del genere:
1073823218 (numero di secondi da 01/01/1970 00:00:00 a oggi) e la
converte in una data "leggibile" (quel valore ad es. è 2004-01-11
13:13:38).
Un aiuto per favore.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Un aiuto per favore.
guardati l'help o il man delle funzioni gmtime() e localtime()
che prendono un input come vuoi tu e restituiscono
un puntatore ad un record
(struct tm, definito come le funzioni in <time.h> )
che contiene i vari dati che ti servono 
(anno,mese,giorno,ore,minuti,secondi e anche giorno della settimana);
Alternativamente puoi usare direttamente la funzione ctime()
Ti faccio un esempio. Vedi un po' cosa ti serve. Ciao. g.
-------------------------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void stampa(time_t *tempo)
{
   struct tm *TM;
   char Giorno[7][12]={"Domenica","Lunedi'","Martedi'","Mercoledi'",
                 "Giovedi'","Venerdi'","Sabato"};
   printf("Secondi %9d = %s",(int)*tempo,ctime(tempo));
   TM = localtime(tempo);
   printf("LocalTime (%02d/%02d) Ore=%02d:%02d  ... E' un %s\n",
          TM->tm_mday,TM->tm_mon+1,
          TM->tm_hour, TM->tm_min,  Giorno[TM->tm_wday]);
}
int main()
{
   time_t ora, dopo;
   // data di ora in secondi dal 1-1-70
   time(&ora);
   // dopo = ora + 1000000 secondi !
   dopo = ora + 1000000;
   printf("\nOra = \n");
   stampa(&ora);
   printf("\nDopo = \n");
   stampa(&dopo);
   return 0;
}
-----------------------------------------------------------------------------------

Sei stato veramente di aiuto.
Grazie mille.


Scusa l'ignoranza ...
Non capisco una cosa (più di una a dire il vero)
Quando scrivi:
time(&ora);
dov'è scritto che la variabile ora è la data di sistema attuale?
Nella sua definzione time_t ora?
E se io volessi dare ad ora un valore qualsiasi a mio piacimento?


 E se io volessi dare ad ora un valore qualsiasi a mio piacimento?
ora = 53453453;
oppure
ora = 0;
oppure
ora = 17*3600+365*3600*24*19;
ora e' di tipo time_t ma in pratica (vedi time.h presumo)
time_h e' un tipo di dato intero,
probabilmente int o  long a seconda del compilatore.
quindi di fatto puoi fare assegnamenti e operazioni
abbastanza agevolmente.

Ma allora perché se faccio così:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
   time_t ora;
 
   printf("Inserisci la data in giuliano: ");
   scanf("%d",&ora);
   printf("%d\n",ora);
   time(&ora);
   printf("%9d <=> %s\n",ora,ctime(&ora));
   return 0;
}
Mi stampa:
Inserisci la data in giuliano: 1065917660
1065917660
1083854437 <=> Thu May  6 16:40:37 2004
Ossia il valore di ora (1065917660) immesso da testiera si perde e 
prende comunque la data di sistema (1083854437).


 Giuliano 1065917660
Cioč passargli il valore come argv[1].
Ho fatto cosě:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main( int argc, char *argv[] )
{
   time_t ora;
 
   ora= (time_t)argv[1];
   printf("%d <=> %s\n",ora,ctime(&ora));
   return 0;
}
ma non funziona.
Il suo output č:
-4196018 <=> Thu Nov 13 11:26:22 1969


    ora= (time_t)argv[1];
e' sbagliato !
non puoi convertire una stringa (argv[1]) in un
tipo intero in quel modo !
devi scrivere qualcosa del tipo
ora = (time_t) atoi(argv[1]);
atoi() o eventualmente atol() a seconda del tuo sistema
sono definite in
stdlib.h
ciao,
g.

 Giuliano 12345667
