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
 

LucaMs

Expert
Licensed User
Longtime User
Hehehe, è sbagliata davvero, pappapero

prova a passargli 11/11/2020; ti darà:

Lunedì corrente: 13/11/2020
Lunedì prossimo: 16/11/2020

che, senza nemmeno cercare, non possono essere giusti (3gg di differenza anziché 7)
 

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)
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
SELECT strftime('%W', '2020-11-09') AS WeekOfYear;
SELECT strftime('%d', '2020-11-19') AS DayOfMonth;
SELECT strftime('%j', '2020-11-19') AS DayOfYear;
SELECT strftime('%m', '2020-11-19') AS Month;
SELECT strftime('%w', '2020-11-19') AS DayOfWeek;
SELECT strftime('%Y', '2020-11-19') AS Year;

Va beh, eventualmente in futuro.
 
Top