Autore Topic: TIME comportamento anomalo  (Letto 560 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
TIME comportamento anomalo
« il: 13 Settembre 2013, 13:09:40 »
sulla mia macchina (nella finestra di debug) ottengo questi risultati:
Codice: [Seleziona]
?time(0,0,3600)
01:00:00

?time(0,0,81459)
04:25:23

Il primo e' ovviamente vero (3600 secondi sono un'ora).
Il secondo palesement sbagliato (81000 secondi sono circa 22 ore).

PERCHE'?
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #1 il: 13 Settembre 2013, 19:47:20 »
.......effettivamente sembra un po' strano.

Ho fatto qualche prova:
Codice: gambas [Seleziona]

Public Sub Form_Open()
 
  Dim i As Integer
 
    For i = 1 To 24
 
      Print Time(0, 0, 3600 * i), 3600 * i
 
    Next
 
End


Ecco lo strano risultato in console:
Codice: [Seleziona]
01:00:00        3600
02:00:00        7200
03:00:00        10800
04:00:00        14400
05:00:00        18000
06:00:00        21600
07:00:00        25200
08:00:00        28800
09:00:00        32400
15:47:44        36000
16:47:44        39600
17:47:44        43200
18:47:44        46800
19:47:44        50400
20:47:44        54000
21:47:44        57600
22:47:44        61200
23:47:44        64800
00:47:44        68400
01:47:44        72000
02:47:44        75600
03:47:44        79200
04:47:44        82800
05:47:44        86400
:-X

Quindi ho posto la questione nella Mailing List ufficiale. Vediamo che dicono....   :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #2 il: 13 Settembre 2013, 19:52:43 »
grazie Vuott .... evito di postare io per vedere se e' un problema solo mio o se e' un bug diffuso ;-)
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #3 il: 13 Settembre 2013, 20:11:25 »
Risponde direttamente Minisini:


" This is because the number of seconds (and minutes, and hours) is stored
in a 16 bits signed integer, and the Time() functions does not check
that its arguments are valid (i.e. the number of hours must be between 0 and 23,
the number of minutes between 0 and 59, and the number of seconds between 0 and 60 -
Yes sometimes a minute can have 61 seconds!).

Regards,

--
Benoît Minisini
"
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #4 il: 13 Settembre 2013, 21:20:03 »
in pratica sta dicendo che un minuto può avere 61 secondi!!
 :rolleyes:
strano....
;D

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #5 il: 14 Settembre 2013, 00:00:08 »
Senza avere alcuna pretesa di volere correggere quanto detto da Minisini, nè sostituirmi a lui,  vorrei aggiungere che l'istruzione Time(ore, minuti, secondi) ,sicuramente, non è nata come istruzione di conversione di un dato numerico, espresso in secondi, in uno in formato data, di cui espone solamente la parte relativa all'orario. Nella documentazione di Gambas.org si legge infatti:
Citazione
Tempo = Time ( Ore AS Integer, Minuti AS Integer, Secondi AS Integer ) AS Date
Costruisce l'orario in base ai valori passati come argomenti.

PRINT Time(14, 08, 25)
14:08:25
Vi manca  però, è vero, l'indicazione di contenere i rispettivi valori in: "0 < Ore < 23" , "0 < Minuti <59" , "0 < Secondi < 59"

Lo stesso criterio logico vale per tutti i valori interni ad un campo "Date":
Date
Citazione
Data = Date ( Anno , Mese , Giorno [ , Ora , Minuti , Secondi ] ) AS Date
Costruisce la data partendo da valori interi (Integer).
---------------------------------------------------------------------------------------------------------------------
PRINT Date(1972, 09, 06, 1, 5, 17)
09/06/1972 01:05:17

Per la conversione esiste l'istruzione CFloat:
Citazione
PRINT Date(1972, 09, 06, 1, 5, 17)
PRINT CFloat(Date(1972, 09, 06, 1, 5, 17))
06.09.1972 01:05:17
2473671,04533565

:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #6 il: 14 Settembre 2013, 00:45:57 »
.... l'istruzione Time(ore, minuti, secondi) ,sicuramente, non è nata come istruzione di conversione di un dato numerico, espresso in secondi, in uno in formato data


...è effettivamente un'idea, questa, che era sorta anche in me.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #7 il: 16 Settembre 2013, 13:14:08 »
vabbe' mi faccio una funzione di conversione custom ....... ma gran parte dell'utilita' di avere una funzione build in che gestisce tutto quello che e' relativo al tempo viene un po' a mancare .......
« Ultima modifica: 16 Settembre 2013, 13:50:02 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #8 il: 12 Ottobre 2013, 01:25:09 »
Dalla MailingList ufficiale oggi giunge un'altra risposta:


" I took a look into source code and I think this is because seconds are
stored in memory as short.
And this confirms I understand correctly:

? time(0,0,32766)
09.06.06

? time(0,0,32767) <--- last good value for signed short
09.06.07

? time(0,0,32768)
14.53.52


1.
So, one simple correction is just change documentation "as integer" --> "as
short".

2.
Or do conversion from seconds to minutes (if they are over 32767) before
asserting them to;

    date.hour = PARAM->_integer.value;
    date.min = PARAM[1]._integer.value;
    date.sec = PARAM[2]._integer.value;

3.
Or change declaration of date, short --> integer.


However, I don't think I know enough about internal work of Gambas to
really make that decision.
What do you think Benoit?


Jussi
"
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re: TIME comportamento anomalo
« Risposta #9 il: 14 Ottobre 2013, 11:47:21 »
grazie della segnalazione vuott :D

effettivamente se estendessero da short  a integer ci sarebbe un po' piu' di tolleranza ...... in ogni caso io ho risolto con una funzione custom :D
se corri, morirai stanco (motto degli sniper)