View Full Version : [C] Da "cumolo di secondi" a "ore:min:sec": è ok?
Matrixbob
23-08-2007, 12:59
Ho fatto questa funzioncina che segue, dovrebbe essere funzionante no? :stordita:
void durata_segmento(float durata, int *ore, int *minuti, int *secondi)
{
*ore = *minuti = *secondi = 0;
if (durata <= 59)
{
*secondi = durata;
}
else
{
while (durata > 59)
{
durata = durata - 60;
++ *minuti;
if (*minuti > 59)
{
*minuti = 0;
++ *ore;
}
}
*secondi = durata;
}
printf("durata_segmento> %d:%d:%d\n", *ore, *minuti, *secondi);
}
Richiamata con:
durata_segmento(durata_mm, &ore_dur_seg, &min_dur_seg, &sec_dur_seg);
Magari c'è qualche funzione per arrotondare invece di troncare il float "durata"? :mbe:
wingman87
23-08-2007, 13:21
A me sembra un po' uno spreco, ti è stato chiesto di farlo così? Altrimenti bastavano un po' di divisioni e resti...
Matrixbob
23-08-2007, 13:34
A me sembra un po' uno spreco, ti è stato chiesto di farlo così? Altrimenti bastavano un po' di divisioni e resti...
No l'implementazione è come si vuole ed a me è venuta in mente quella di getto. :boh:
L'importante è che esca un formato: ore, minuti, secondi.
Perchè devo inserirlo in un file MP7.XML che accetta solo le cose tipo:
T00H00M00S oppure 0:0:0,
insomma ste cacate qui. :)
Se hai voglia posta la tua soluzione o i tuoi consigli, non mancherò di leggerli.
Ma dovrebbe funzionare la mia no?!
Ma usare le funzioni standard no ?
time_t seconds = 10020103; //il numero di secondi che vuoi convertire
struct tm *ptm;
ptm = gmtime(&seconds);
ptm->tm_hour //qui ci sono le ore
ptm->tm_min //qui ci sono i minuti
ptm->tm_sec //qui ci sono i secondi
Ora mi sembra che vada bene gmtime...
Attenzione che se vai oltre le 24 ore devi guardare anche tm_day, in alternativa le ore calcolatele a mano: seconds / 3600
Farei così:
void durata_segmento (float durata, int *ore, int *minuti, int *secondi)
{
long d = (long) durata;
*ore = (int) (d / 3600);
*minuti = (int) (d / 60 % 60);
*secondi = (int) (d % 60);
}L'unica cosa da stabilire è se 'durata' può andare o no oltre le 24 ore e se sì cosa si vuole fare.
Matrixbob
23-08-2007, 15:19
Ma usare le funzioni standard no ?
time_t seconds = 10020103; //il numero di secondi che vuoi convertire
struct tm *ptm;
ptm = gmtime(&seconds);
ptm->tm_hour //qui ci sono le ore
ptm->tm_min //qui ci sono i minuti
ptm->tm_sec //qui ci sono i secondi
Ora mi sembra che vada bene gmtime...
Attenzione che se vai oltre le 24 ore devi guardare anche tm_day, in alternativa le ore calcolatele a mano: seconds / 3600
E' standard ANSI C quello o è roba di MSDN?!
Io sto cercando di restare fedele il + possibile al GCC.
Matrixbob
23-08-2007, 15:21
Farei così:
void durata_segmento (float durata, int *ore, int *minuti, int *secondi)
{
long d = (long) durata;
*ore = (int) (d / 3600);
*minuti = (int) (d / 60 % 60);
*secondi = (int) (d % 60);
}
Il grande Andbin è tornato! (spero hai fatto buone vacanze :), come anche tutti gli altri programmatori della sezione)
Praticamente quel durata non è altro che quello che ricavavamo da qui:
[C] File audio MP3: devo leggerne l'Header x saperne la lunghezza in tempo?! (http://www.hwupgrade.it/forum/showthread.php?t=1492710)con la libreria MCI.
Quelli erano millisecondi e quindi io li ho moltiplicati x1000 per avere i secondi. :D
L'unica cosa da stabilire è se 'durata' può andare o no oltre le 24 ore e se sì cosa si vuole fare.
Quindi penso che durata possa andare oltre.
Fosse anche 48 va bene, 96 va bene, ecc...
Devo metterlo in un file MP7.XML che accetta cose del tipo:
T00H00M00S oppure 0:0:0,
nel MediaTime.
Matrixbob
23-08-2007, 15:35
*minuti = (int) (d / 60 % 60);
Questo mi lascia di stucco, cosa fa la divisione intera e poi fa il resto della divisione intera sul risultato?! :eek:
E' standard ANSI C quello o è roba di MSDN?!
Io sto cercando di restare fedele il + possibile al GCC.
Tutto standard.
cosa fa la divisione intera e poi fa il resto della divisione intera sul risultato?! :eek:
Sì ;)
Matrixbob
23-08-2007, 15:49
Sì ;)
Ma siamo sicuri che restituisce ore, minuti, secondi?
Che ora non posso provarla, sono imbelinato nel riscrivere parti di codice. :(
Ma siamo sicuri che restituisce ore, minuti, secondi?
Certo...
In un'ora ci sono 3600 secondi (60 * 60).
secondi / 3600 = ore
secondi / 60 = minuti totali
minuti totali % 60 = minuti che non compongono un'ora intera
secondi % 60 = secondi che non compongono un minuto intero
Matrixbob
23-08-2007, 18:00
Funziona funziona.
Siete bellissimi, ogniuno col suo stile di programmazione, di cui il mio è il + scadente. :)
Ma spero di migliorare prima o poi, l'esperienza fa tanto. :)
Funziona funziona.
Siete bellissimi, ogniuno col suo stile di programmazione, di cui il mio è il + scadente. :) grazie :O
Ma spero di migliorare prima o poi, l'esperienza fa tanto. :) eeeh be', in realtà non lo so... vedremo cosa si potrà fare. per ora fermo rimane che sono bellissimo. :O
Funziona funziona.
Siete bellissimi, ogniuno col suo stile di programmazione:eek:di cui il mio è il + scadente. :) eh no, il posto non me lo freghi :asd:
:eek: era una licenza poetica :O
Matrixbob
24-08-2007, 17:23
L'unica cosa da stabilire è se 'durata' può andare o no oltre le 24 ore e se sì cosa si vuole fare.
Questa "pseudo" domanda ormai mi ronza in testa, anche perchè non capisco bene l'espressione regolare indicante il tempo in MPEG-7:
[MP7] Produco questo documento, ma pare non valido: perchè? (http://www.hwupgrade.it/forum/showthread.php?t=1536375)
Non vedo specificati giorni, ma nemmeno andare oltre alle 2 cifre per numero.
:boh:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.