View Full Version : data e ora in C++
Leggendo il prototipo della funzione time()
time_t time(time_t *);
avevo pensato di fare così:
#include "ctime"
...
time_t ora, *res;
ora=time(res);
cout<<"ora: "<<ora<<endl;
ma è certamente sbagliato: mi restituisce una sequenza di numeri!
Dov'è ke sbaglio? Mi date una mano x favore?
DanieleC88
02-06-2005, 09:15
Premesso che bastava anche:
time_t risultato;
risultato = time(NULL);
Il risultato che vedi è assolutamente corretto. In effetti time restituisce i secondi passati dal giorno 01/01/1970.
Se hai problemi ti mando la pagina di manuale di Linux e ti do altro aiuto.
Fenomeno85
02-06-2005, 10:12
http://www.cplusplus.com/ref/ctime/
~§~ Sempre E Solo Lei ~§~
grazie a tutti, ma allora non c'è una funzione che restituisca solo la data (x es Fri Jun 03 2005) o solo l'ora (x es 17:40:25)?
Avevo pensato a strftime()
size_t strftime (char* str, size_t maxsize, const char* fmt, const struct tm* time );
"inserisce nella stringa puntata da str le informazioni relative alla data e all'ora e anche altre informazioni usando comandi di formattazione contenuti nella stringa puntata da fmt impiegando l'oa specificata in time . In str verrà inserito un massimo di maxsize caratteri."
%x -- stringa standard per la data
%X -- stringa standard per l'ora
ma, se faccio
#include "ctime"
...
time_t ora=time(NULL);
struct tm *pointer=gmtime(&ora);
char *data;
strftime(data, 100, "%x", pointer);
cout<<"data: "<<data<<endl;
non va. Suggerimenti?
Avevo pensato eventualmente di usare ctime (che restituisce qcs. tipo Fri Jun 03 17:40:35 2005), troncando ai primi 10 caratteri x ottenere solo la data, con memmove()
void *memmove(void *to, void *from,size_t count)
"copia count caratteri dall'array puntato da from all'array puntato da to. Restituisce un puntatore a to."
in questo modo
#include "cstring"
#include "ctime"
...
time_t ora=time(NULL);
char *from=ctime(&ora);
char *to;
memmove(to, from, 10);
cout<<"data: "<<to<<endl;
oppure semplicemente come
#include "cstring"
#include "ctime"
...
time_t ora=time(NULL);
char *from=ctime(&ora);
char *to;
to=from;
to[11]='\0';
cout<<"data: "<<to<<endl;
ma in quest'ultimo caso nn sono tanto sicuro se l'uso dei puntatori è corretto
:confused: :cry: :cry: :cry:
Fenomeno85
04-06-2005, 09:42
eppure son convinto che esiste il modo per avere direttamente dei singoli pezzi esempio solo ora, solo giorno e solo mese senza manipolare la stringa :muro:
~§~ Sempre E Solo Lei ~§~
DanieleC88
04-06-2005, 13:16
eppure son convinto che esiste il modo per avere direttamente dei singoli pezzi esempio solo ora, solo giorno e solo mese senza manipolare la stringa :muro:
Infatti mi sembra molto strano... a me funziona la prima proposta da d@vid.
Infatti mi sembra molto strano... a me funziona la prima proposta da d@vid.
già è vero!
nn so xkè ma qcs la prima volta ke l'ho provata nn è andata! Forse ho fatto qc errore nella compilazione... :p
ok allora problema risolto :D
come non detto: xkè una singola kiamata a strftime funziona,
ma se ne faccio 2, anke non consecutive, all'interno dello stesso programma, solo la prima va a buon fine? :mbe:
provate questo codice: se si lascia solo la prima o solo la II kiamata va bene (NOTA: A PATTO DI CANCELLARE IL PUNTATORE - data oppure ore - NON USATO - chissà xkè poi?), ma se si lasciano entrambe solo la prima kiamata a strftime va:
#include "ctime"
#include "iostream"
using namespace std;
int main(void) {
time_t ora;
struct tm *pointer;
char *data, *ore;
ora=time(NULL);
pointer=gmtime(&ora);
strftime(data, 10, "%x", pointer);
cout<<"data: "<<data<<endl;
strftime(ore, 10, "%X", pointer);
cout<<"ore: "<<ore<<endl;
return 0;
}
:mbe: :mbe:
DanieleC88
05-06-2005, 08:54
int main()
{
[...]
data = (char *) malloc(10);
ore = (char *) malloc(10);
[...]
free(data);
free(ore);
return 0;
}
int main()
{
[...]
data = (char *) malloc(10);
ore = (char *) malloc(10);
[...]
free(data);
free(ore);
return 0;
}
in pratica nn avevo allocato i puntatori :doh: , è questo l'errore?
cmq grazie funziona alla grande! ;)
DanieleC88
05-06-2005, 09:31
in pratica nn avevo allocato i puntatori :doh: , è questo l'errore?
Esattamente, ma la cosa che mi sembra strana è che senza malloc la prima chiamata funziona, mentre la seconda no. Forse perché "ore", prima di essere allocata, puntava al nulla? Dovrebbe essere così, ma mi sembra strano che, invece "data" puntava ad una zona di memoria valida.
Fenomeno86, illuminaci tu! :ave:
:Prrr:
Fenomeno85
05-06-2005, 10:03
Esattamente, ma la cosa che mi sembra strana è che senza malloc la prima chiamata funziona, mentre la seconda no. Forse perché "ore", prima di essere allocata, puntava al nulla? Dovrebbe essere così, ma mi sembra strano che, invece "data" puntava ad una zona di memoria valida.
Fenomeno86, illuminaci tu! :ave:
:Prrr:
lo sapevo che esisteva il modo :D :winner: non dovrei darvi la soluzione dato che son FENOMENO85 :Prrr:
~§~ Sempre E Solo Lei ~§~
Fenomeno85
05-06-2005, 10:13
scusate ma ora che ho smosso la macchina virtuale ci ho messo un pò :D e poi venitemi a dire che non son bravo :D
http://digilander.libero.it/le.faccine/faccinea/varie/98.gifhttp://digilander.libero.it/le.faccine/faccinea/varie/98.gifhttp://digilander.libero.it/le.faccine/faccinea/varie/98.gifhttp://digilander.libero.it/le.faccine/faccinea/varie/98.gifhttp://digilander.libero.it/le.faccine/faccinea/varie/98.gif
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
int main (void){
char message[256];
struct timeval tv;
struct tm* ptm;
gettimeofday (&tv, NULL);
ptm = localtime (&tv.tv_sec);
strftime (message, 256, "%a %d %b %Y %H %M %S %z", ptm);
printf ("%s", message);
return (1);
}
~§~ Sempre E Solo Lei ~§~
Esattamente, ma la cosa che mi sembra strana è che senza malloc la prima chiamata funziona, mentre la seconda no. Forse perché "ore", prima di essere allocata, puntava al nulla? Dovrebbe essere così, ma mi sembra strano che, invece "data" puntava ad una zona di memoria valida.
Fenomeno86, illuminaci tu! :ave:
:Prrr:
davvero strano, me ne sono accorto pure io: è quello che volevo dire dicendo in breve di cancellare il puntatore nn usato, xkè nn sapevo come spiegarlo :sofico: prima che qcn avesse provato il codice :read:
:D :D :D
DanieleC88
05-06-2005, 12:20
e poi venitemi a dire che non son bravo :D
Non sei bravo.
Tie'! :Prrr:
:D
char message[256];
Ah... lo sapevo io che c'era l'inghippo! Qui si parlava di puntatori, non di variabili a grandezza fissa... e poi, il problema era con due puntatori diversi e due diverse chiamate a strftime()... a farla come l'hai fatta tu ci riuscivo anch'io! :p
Il mistero s'infittisce...
Fenomeno85
05-06-2005, 12:21
Non sei bravo.
Tie'! :Prrr:
:D
Ah... lo sapevo io che c'era l'inghippo! Qui si parlava di puntatori, non di variabili a grandezza fissa... e poi, il problema era con due puntatori diversi e due diverse chiamate a strftime()... a farla come l'hai fatta tu ci riuscivo anch'io! :p
Il mistero s'infittisce...
definirlo su + variabili fa schifo?? :D o ancora meglio usare la struttura?? :D
~§~ Sempre E Solo Lei ~§~
Fenomeno85
05-06-2005, 12:25
in pratica nn avevo allocato i puntatori :doh: , è questo l'errore?
cmq grazie funziona alla grande! ;)
cmq usare malloc in quel modo è alquanto inutile dato che metti già te a priori la dimensione da allocare ;)
~§~ Sempre E Solo Lei ~§~
DanieleC88
05-06-2005, 12:26
non dovrei darvi la soluzione dato che son FENOMENO85 :Prrr:
Whoops, mi è scappato un 6, scusami!
E non te la prendere, ti ho pure ringiovanito di un anno, vecchio decrepito che non sei altro!
Fenomeno85
05-06-2005, 12:31
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#define DIM 20
int main (void){
char *ora, *giorno;
struct timeval tv;
struct tm* ptm;
gettimeofday (&tv, NULL);
ptm = localtime (&tv.tv_sec);
giorno = (char*)malloc (DIM);
strftime (giorno, DIM, "%a %d %b %Y ", ptm);
printf ("\n\n%s", giorno );
ora = (char*)malloc (DIM);
strftime (ora, "%H %M %S %z", ptm);
printf ("\n\n%s", ora);
return (1);
}
dovrebbe andare anche se non l'ho testata
~§~ Sempre E Solo Lei ~§~
Fenomeno85
05-06-2005, 12:31
Whoops, mi è scappato un 6, scusami!
E non te la prendere, ti ho pure ringiovanito di un anno, vecchio decrepito che non sei altro!
:asd:
~§~ Sempre E Solo Lei ~§~
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
int main (void){
char message[256];
struct timeval tv;
struct tm* ptm;
gettimeofday (&tv, NULL);
ptm = localtime (&tv.tv_sec);
strftime (message, 256, "%a %d %b %Y %H %M %S %z", ptm);
printf ("%s", message);
return (1);
}
sai ke nn me lo fa compilare? Ma hai usato funzioni di libreria std?gettimeofday nn me la trova
Fenomeno85
06-06-2005, 20:45
sai ke nn me lo fa compilare? Ma hai usato funzioni di libreria std?gettimeofday nn me la trova
è codice di linux in win dovrei sbattermi a trovarla :D ma è fattibile :D
~§~ Sempre E Solo Lei ~§~
è codice di linux in win dovrei sbattermi a trovarla :D ma è fattibile :D
Nn c'è bisogno :mano: : proverò ad eseguirla sotto linux allora. Dovrebbe andare, no?
Mi dici solo i flag da digitare nella riga di comando x linkare le librerie? tnx ;)
DanieleC88
07-06-2005, 13:45
è codice di linux in win dovrei sbattermi a trovarla :D ma è fattibile :D
Uhm...
CONFORMING TO
SVr4, BSD 4.3. POSIX 1003.1-2001 describes gettimeofday() but not set-
timeofday().
Sembra essere negli standard POSIX. Dovrebbe esserci anche sotto Windows! Controllate bene...
d@avid: non devi passare alcuna flag, basta compilare usando, ad esempio:
gcc main.c -o ./time-test -O2 -Wall
E nota che "-O2 -Wall" non sono strettamente necessarie, ma te le consiglio.
a ke serve -O2 -Wall?
io ho sempre fatto
g++ -o exe source.cpp
se source.cpp è il codice sorgente e exe è il nome dell'eseguibile
DanieleC88
08-06-2005, 12:41
a ke serve -O2 -Wall?
Sono solo delle flag per il compilatore.
"-Wall" attiva tutti i warning, e ti permette di scrivere codice che sia più compatibile con altri processori (più "standard") e con un minor numero di potenziali errori.
"-O2" attiva l'ottimizzazione del codice assembly prodotto da GCC. Puoi anche provare "-O" (una ottimizzazione minore) oppure "-Os" (ottimizza per la dimensione del codice piuttosto che per la velocità).
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.