PDA

View Full Version : Trasformazione data


GiulioCesare
23-03-2005, 18:29
Salve ragazzi, ho un problema, da un input che mi specifica il giorno
dell'anno espresso in numero, voglio in output la data espressa in lettere.
Faccio un esempio per farmi capire meglio, se il numero inserito è 34,
l'output deve essere 3 febbraio, ovviamente l'input dovrà essere compreso
tra 1 e 365, senza considerare l'anno bisestile. Ho fatto questo programma,
che però controlla tutti i casi, c'è forse un modo migliore per velocizzare
il calcolo? Grazie a chi vorrà aiutarmi, ecco qui il codice

int main()
{
int n;
int data;

cout<<"Inserire giorno dell'anno espresso in numero"<<endl;
cin>>n;

if (n<=31)

cout<<"Gennaio " << n <<endl;

if ((n>31) and (n<=59))
{
data=n-31;
cout<<"Febbraio "<< data <<endl;
}
if ((n>59) and (n<=90))
{
data=n-59;
cout<<"Marzo "<< data <<endl;
}
if ((n>90) and (n<=120))
{
data=n-90;
cout<<"Aprile "<< data <<endl;
}
if ((n>120) and (n<=151))
{
data=n-120;
cout<<"Maggio "<< data <<endl;
}
if ((n>151) and (n<=181))
{
data=n-151;
cout<<"Giugno "<< data <<endl;
}
if ((n>181) and (n<=212))
{
data=n-181;
cout<<"Luglio "<< data <<endl;
}
if ((n>212) and (n<=243))
{
data=n-212;
cout<<"Agosto "<< data <<endl;
}
if ((n>243) and (n<=273))
{
data=n-243;
cout<<"Settembre "<< data <<endl;
}
if ((n>273) and (n<=304))
{
data=n-273;
cout<<"Ottobre "<< data <<endl;
}
if ((n>304) and (n<=334))
{
data=n-304;
cout<<"Novembre "<< data <<endl;
}
if ((n>334) and (n<=365))
{
data=n-334;
cout<<"Dicembre "<< data <<endl;
}

return 0;

ilsensine
24-03-2005, 07:38
Puoi usare le funzioni di time.h; ad esempio:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>

int main(int argc, char **argv)
{
struct tm t;
time_t _t;
if(argc!=2) {
printf("Formato: %s <giorni>\n", argv[0]);
return -1;
}
memset(&t, 0, sizeof(t));
t.tm_year = 105; // 1900+105=2005
t.tm_mday = atoi(argv[1]);
_t = mktime(&t);
t = *localtime(&_t);
printf("%d giorni dall'inizio dell'anno: %s\n", atoi(argv[1]), asctime(&t));
return 0;
}

La documentazione mi dice che mktime, localtime e asctime sono ISO9899, quindi dovrebbero essere disponibili su tutti i sistemi.