Italian [ Solved ] Gestione Data in android

Xfood

Expert
Licensed User
Battuto sul filo di lana..eheheh
B4X:
Dim dow As Int = DateTime.GetDayOfWeek(oggi)    '1 =dom, 2= lun...7=sab
Dim period1 As Period
period1.Initialize
If dow = 1 Then    period1.Days = -6 Else period1.Days= dow-2
Dim lunC As Long = DateUtils.AddPeriod(oggi,period1)
If dow = 1 Then    period1.Days = 1 Else period1.Days= 9-dow
Dim lunN As Long = DateUtils.AddPeriod(oggi,period1)
Log("Lunedì corrente: "&DateTime.Date(lunC))
Log("Lunedì prossimo: "&DateTime.Date(lunN))
Questa sera provo . Grazie
 

udg

Expert
Licensed User
Longtime User
Non l'avevo provata, ma rileggendo manca solo un segno meno (per un punto martin perse la cappa)..
B4X:
If dow = 1 Then period1.Days = -6 Else period1.Days= -(dow-2)

Quindi il codice da provare dovrebbe essere:
B4X:
    Dim oggi As Long = DateTime.DateParse("11/20/2020")    'DateTime.now
    Dim dow As Int = DateTime.GetDayOfWeek(oggi)    '1=dom, 2=lun, 3=mar, 4=mer, 5=gio, 6=ven, 7=sab
    Log(dow)
 
    Dim period1 As Period
    period1.Initialize
    If dow = 1 Then period1.Days = -6 Else period1.Days= -(dow-2)
    Dim lunC As Long = DateUtils.AddPeriod(oggi,period1)
    If dow = 1 Then period1.Days = 1 Else period1.Days= 9-dow
    Dim lunN As Long = DateUtils.AddPeriod(oggi,period1)
    Log("Lunedì corrente: "&DateTime.Date(lunC))
    Log("Lunedì prossimo: "&DateTime.Date(lunN))
Non mi sono preso la briga di cambiare il formato data né di proporre i giorni di termine della settimana.
Magari la funzione potrebbe ritornare un tipo Map così da avere inzio/fine sia della settimana in corso che di quella corrente.
 
Last edited:

udg

Expert
Licensed User
Longtime User
Solo una cosa: anziché calcolare il lunedì successivo, basta aggiungere 7gg al lunedì "corrente"
Vero. Mi ero lasciato prendere la mano..ehehe
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
    Type tDateLunSab(DataLunCorr As String, DataSabCorr As String, DataLunPros As String, DataSabPros As String)


    DateTime.DateFormat = "dd/MM/yyyy"
    Dim DataDiProva As String = "08/11/2020" ' domenica

    Dim LunSab As tDateLunSab = Udg2(DataDiProva)
    Log("Lun " & LunSab.DataLunCorr & TAB & "Sab " & LunSab.DataSabCorr)
    Log("Lun " & LunSab.DataLunPros & TAB & "Sab " & LunSab.DataSabPros)

B4X:
Sub Udg2(CurrDate As String) As tDateLunSab
    Dim DateLunSab As tDateLunSab
    DateLunSab.Initialize

    Dim lngDate As Long = DateTime.DateParse(CurrDate)
    Dim DayOfWeek As Int = DateTime.GetDayOfWeek(lngDate)    '1=dom, 2=lun, 3=mar, 4=mer, 5=gio, 6=ven, 7=sab

    Dim period1 As Period
    period1.Initialize

    If DayOfWeek = 1 Then period1.Days = -6 Else period1.Days= -(DayOfWeek-2)
    Dim lngLunCorrente As Long = DateUtils.AddPeriod(lngDate, period1)

    period1.Days = 7
    Dim lngLunProssimo As Long = DateUtils.AddPeriod(lngLunCorrente, period1)
   
    period1.Days = 6
    DateLunSab.DataLunCorr = DateTime.Date(lngLunCorrente)
    DateLunSab.DataSabCorr = DateTime.Date(DateUtils.AddPeriod(lngLunCorrente, period1))
    DateLunSab.DataLunPros = DateTime.Date(lngLunProssimo)
    DateLunSab.DataSabPros = DateTime.Date(DateUtils.AddPeriod(lngLunProssimo, period1))

    Return DateLunSab
End Sub

Probabilmente cambierei nome alla funzione Udg2 ?
 
Last edited:

Xfood

Expert
Licensed User
B4X:
    Type tDateLunSab(DataLunCorr As String, DataSabCorr As String, DataLunPros As String, DataSabPros As String)


    Dim LunSab As tDateLunSab = Udg2(DataDiProva)
    Log("Lun " & LunSab.DataLunCorr & TAB & "Sab " & LunSab.DataSabCorr)
    Log("Lun " & LunSab.DataLunPros & TAB & "Sab " & LunSab.DataSabPros)

B4X:
Sub Udg2(CurrDate As String) As tDateLunSab
    Dim DateLunSab As tDateLunSab
    DateLunSab.Initialize

    Dim lngDate As Long = DateTime.DateParse(CurrDate)
    Dim DayOfWeek As Int = DateTime.GetDayOfWeek(lngDate)    '1=dom, 2=lun, 3=mar, 4=mer, 5=gio, 6=ven, 7=sab
 
    Dim period1 As Period
    period1.Initialize

    If DayOfWeek = 1 Then period1.Days = -6 Else period1.Days= -(DayOfWeek-2)
    Dim lngLunCorrente As Long = DateUtils.AddPeriod(lngDate, period1)

    period1.Days = 7
    Dim lngLunProssimo As Long = DateUtils.AddPeriod(lngLunCorrente, period1)
    
    period1.Days = 6
    DateLunSab.DataLunCorr = DateTime.Date(lngLunCorrente)
    DateLunSab.DataSabCorr = DateTime.Date(DateUtils.AddPeriod(lngLunCorrente, period1))
    DateLunSab.DataLunPros = DateTime.Date(lngLunProssimo)
    DateLunSab.DataSabPros = DateTime.Date(DateUtils.AddPeriod(lngLunProssimo, period1))

    Return DateLunSab
End Sub

Probabilmente cambierei nome alla funzione Udg2 ?
Troppo buoni.???
 

udg

Expert
Licensed User
Longtime User
Dai che è il giochino di oggi!
E se come tipo mettessimo solo Lun e Sab e alla funzione passassimo un parametro che dica se vogliamo i gg della settimana corrente o di quella prossima?
Oppure (ancora più generico), se il tipo fosse GiornoIniziale e GiornoFinale e poi i valori ritornati dipendano da parametri passati alla funzione?
es.
sub HuuhDays(DataTest as string (o long), SettimanaAttuale as boolean) as tipo1 (quelloLun/Sab)
Sub HuuHDays2 (DataTest as string (o long), SettimanaAttuale as boolean, GiornoInizio as int, GiornoFine as int), con giorno inzio/fine 1..7

ps: il nome l'ho cambiato :D
 

LucaMs

Expert
Licensed User
Longtime User
Dai che è il giochino di oggi!
E se come tipo mettessimo solo Lun e Sab e alla funzione passassimo un parametro che dica se vogliamo i gg della settimana corrente o di quella prossima?
Oppure (ancora più generico), se il tipo fosse GiornoIniziale e GiornoFinale e poi i valori ritornati dipendano da parametri passati alla funzione?
es.
sub HuuhDays(DataTest as string (o long), SettimanaAttuale as boolean) as tipo1 (quelloLun/Sab)
Sub HuuHDays2 (DataTest as string (o long), SettimanaAttuale as boolean, GiornoInizio as int, GiornoFine as int), con giorno inzio/fine 1..7

ps: il nome l'ho cambiato :D
... e se le rendessimo internazionali? Un paio d'ore e sarebbero tutte pronte ? (perché ottenere il giorno inziale della settimana... con AHLocale si potrebbe, ma solo B4A, con B4J e B4i... dovrei cercare)
 
Top