Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 25 Agosto 2022, 00:42:10

Titolo: [Risolto] Come si confronta il tempo?
Inserito da: Gianluigi - 25 Agosto 2022, 00:42:10
Il codice seguente se scritto in FMain.class di una nuova applicazione grafica funziona, ma non mi convince e pertanto rinnovo la domanda in oggetto  :-\

Codice: [Seleziona]
Private $hTime As Date
Private $sTime As String
Private $hTimer As Timer

Public Sub Form_Open()

  Dim hButton As Button

  With Me
    .W = 240
    .H = 152
    .Margin = True
    .Arrangement = Arrange.Fill
  End With
  With hButton = New Button(Me) As "Button1"
    .Text = "Avvia il confronto Time"
  End With
  With $hTimer = New Timer As "Timer1"
    .Delay = 1000
    .Ignore = True
  End With

End

Public Sub Timer1_Timer()

   Dim hNow As Date = Time(Now)
   Dim sNow As String = Format(hNow, "hh:nn:ss")

   Print hNow;; $hTime

   ''If hNow = $hTime Then '' perché questo non funziona? :-/
   If sNow = $sTime Then '' e invece questo funziona ma...
     Print "UGUALE"
     $hTimer.Stop
   Endif

End

Public Sub Button1_Click()

  $hTimer.Start
  $hTime = Time(Hour(Now), Minute(Now) + 1, 0)
  $sTime = Format($hTime, "hh:nn:ss")

End
Titolo: Re:Come si confronta il tempo?
Inserito da: Gianluigi - 25 Agosto 2022, 09:36:21
Probabilmente il modo più corretto è questo:
Codice: [Seleziona]
Private $hTimer As Timer
Private $iHour As Integer
Private $iMinute As Integer

Public Sub Form_Open()

  Dim hButton As Button

  With Me
    .W = 240
    .H = 152
    .Margin = True
    .Arrangement = Arrange.Fill
  End With
  With hButton = New Button(Me) As "Button1"
    .Text = "Avvia il confronto Time"
  End With
  With $hTimer = New Timer As "Timer1"
    .Delay = 1000
    .Ignore = True
  End With

End

Public Sub Timer1_Timer()

   Dim iHour As Integer = Hour(Now)
   Dim iMinute As Integer = Minute(Now)

   Print iHour; ":"; iMinute;; $iHour; ":"; $iMinute

   If iHour = $iHour And If iMinute = $iMinute Then
     Print "UGUALE"
     $hTimer.Stop
   Endif

End

Public Sub Button1_Click()

  $hTimer.Start
  $iHour = Hour(Now)
  $iMinute = Minute(Now) + 1

End

 :ciao:
Titolo: Re:Come si confronta il tempo?
Inserito da: milio - 25 Agosto 2022, 11:01:23
Penso che tu non consideri i millisecondi
Se formatti il tuo tempo con la stringa "hh:nn:ss.uuu" vedrai che hNow e $hTime sono diversi
Titolo: Re:Come si confronta il tempo?
Inserito da: Gianluigi - 25 Agosto 2022, 11:26:06
Penso che tu non consideri i millisecondi
Se formatti il tuo tempo con la stringa "hh:nn:ss.uuu" vedrai che hNow e $hTime sono diversi

Lo avevo notato usando cstr(), comunque mi hai illuminato  :) per il confronto occorre usare DateDiff :
Codice: [Seleziona]
Private $hTime As Date
Private $hTimer As Timer

Public Sub Form_Open()

  Dim hButton As Button

  With Me
    .W = 240
    .H = 152
    .Margin = True
    .Arrangement = Arrange.Fill
  End With
  With hButton = New Button(Me) As "Button1"
    .Text = "Avvia il confronto Time"
  End With
  With $hTimer = New Timer As "Timer1"
    .Delay = 1000
    .Ignore = True
  End With

End

Public Sub Timer1_Timer()

   Dim hNow As Date = Time(Now)

   Print DateDiff($hTime, hNow, gb.Second)

   If DateDiff($hTime, hNow, gb.Second) = 0 Then
     Print "UGUALE"
     $hTimer.Stop
   Endif

End

Public Sub Button1_Click()

  $hTimer.Start
  $hTime = Time(Hour(Now), Minute(Now) + 1, 0)

End

 :ciao:
Titolo: Re:[Risolto] Come si confronta il tempo?
Inserito da: Gianluigi - 25 Agosto 2022, 14:01:48
Credo di poter considerare la questione risolta.
Solo aggiungo una considerazione, nel caso uno abbia bisogno di sapere se sono scattati l'ora e minuti prescelti, che poi era la mia necessità, penso che il confronto per interi sia meno dispendioso dell'uso di DateDiff e pertanto sia da preferire.
 :ciao: