Italian Info DateUtils.PeriodBetween

Fulvio75

Well-Known Member
Licensed User
Ciao ho bisogno una info:

Ho una data e ora
A="14/01/2022 13:40"
B="15/01/2022 13:45"

Devo calcolare le ore con period=dateutils.between(a,b)

Non mi calcola il giorno di differenza e mi restituisce 00:05 perché?
Mi aspettavo 24:05
Poi il period.day mi da 0 anziché 1
 

LucaMs

Expert
Licensed User
Longtime User
Ciao ho bisogno una info:

Ho una data e ora
A="14/01/2022 13:40"
B="15/01/2022 13:45"

Devo calcolare le ore con period=dateutils.between(a,b)

Non mi calcola il giorno di differenza e mi restituisce 00:05 perché?
Mi aspettavo 24:05
Poi il period.day mi da 0 anziché 1

Cosa vedi qui?

1646933373137.png
 

Fulvio75

Well-Known Member
Licensed User
Appunto... Ho usato quello ma mi restituisce l'orario errato a meno che 00:15 stia ad indicare 24:15 e non 15 minuti
 

Sagenut

Expert
Licensed User
Longtime User
B4X:
log(DateUtils.PeriodBetween(DateUtils.SetDateAndTime(2022, 1, 14, 13, 40, 00), DateUtils.SetDateAndTime(2022, 1, 15, 13, 45, 00)))
Prova così
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
Private Sub Test
    Dim A As String = "14/01/2022 13:40"
    Dim B As String = "15/01/2022 13:45"
   
    DateTime.DateFormat = "dd/MM/yyyy HH:mm"

    Dim lngA As Long = DateTime.DateParse(A)
    Dim lngB As Long = DateTime.DateParse(B)
   
    Log(DateUtils.PeriodBetween(lngA, lngB).Days)
    Log(DateUtils.PeriodBetween(lngA, lngB).Minutes)
End Sub
 

Fulvio75

Well-Known Member
Licensed User
B4X:
Private Sub Test
    Dim A As String = "14/01/2022 13:40"
    Dim B As String = "15/01/2022 13:45"
  
    DateTime.DateFormat = "dd/MM/yyyy HH:mm"

    Dim lngA As Long = DateTime.DateParse(A)
    Dim lngB As Long = DateTime.DateParse(B)
  
    Log(DateUtils.PeriodBetween(lngA, lngB).Days)
    Log(DateUtils.PeriodBetween(lngA, lngB).Minutes)
End Sub
Ho bisogno che esca 24:05
 

LucaMs

Expert
Licensed User
Longtime User
Ho bisogno che esca 24:05
B4X:
Private Sub Test(DateA As String, DateB As String) As String
    DateTime.DateFormat = "dd/MM/yyyy HH:mm"

    Dim lngA As Long = DateTime.DateParse(DateA)
    Dim lngB As Long = DateTime.DateParse(DateB)
    
    Dim Hours As Int = DateUtils.PeriodBetween(lngA, lngB).Hours
    If Hours = 0 Then Hours = 24
    Dim Mins As Int = DateUtils.PeriodBetween(lngA, lngB).Minutes
    
    Return NumberFormat(Hours, 2, 0) & ":" & NumberFormat(Mins, 2, 0)
    
End Sub
 

Fulvio75

Well-Known Member
Licensed User
B4X:
Private Sub Test(DateA As String, DateB As String) As String
    DateTime.DateFormat = "dd/MM/yyyy HH:mm"

    Dim lngA As Long = DateTime.DateParse(DateA)
    Dim lngB As Long = DateTime.DateParse(DateB)
  
    Dim Hours As Int = DateUtils.PeriodBetween(lngA, lngB).Hours
    If Hours = 0 Then Hours = 24
    Dim Mins As Int = DateUtils.PeriodBetween(lngA, lngB).Minutes
  
    Return NumberFormat(Hours, 2, 0) & ":" & NumberFormat(Mins, 2, 0)
  
End Sub
Ok quindi bisogna praticamente comporlo, non c'è modo di trovarlo con between... E se fosse 26:05? Quindi i giorni in ore? Se non lascio 00:05 l'importante che gli altri orari escano come 25:00 , 26:00 ecc.
 

Fulvio75

Well-Known Member
Licensed User
26:05 in giorni e ore?

Cioè intendi 26 giorni e 5 ore o minuti?

"Giocaci", troverai la soluzione. Il primo problema era che passavi stringhe a una funzione che richiede Long.
Ho sbagliato a scrivere non sono davanti al PC ho usato datetimeparse con le date e ora
 
Top