Italian Invertire formato data

dragonblu19

Member
Licensed User
Salve a tutti, come da titolo, vorrei sapere come posso fare il formato data da yyyy/MM/dd in dd/MM/yyyy.
Chiedo questo perchè uso un db su altervista che salva il formato data in yyyy/MM/dd. Quando lo vado a prendere, quindi, me lo salva in quel formato, e vorrei sapere come posso fare per riportare quella data in un'altra label nel formato dd/MM/yyyy.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Attento che stai confondendo il "tipo di dato" con la sua "rappresentazione".

Sul database una data è salvata in formato "data", poi dipende da come la vuoi tu rappresentare in stringa.
Ad esempio, se io ho un tipo di dato "int", ad esempio il valore 1000, quando lo vado a scrivere sul database in realtà lui non scrive "1000" ma scrive 0x03E8
Quando poi vado a leggerlo e a visualizzarlo, starà a me decidere se vederlo come "1000", oppure come 0x03E8, oppure come 0b0000001111101000

Per cui, quando vai a leggere una data dal database, ti ritrovi un tipo di dato "data".
Adesso puoi trasformare questa data in stringa per poterla visualizzare come vuoi tu.
Prima di tutto devi impostare il formato che vuoi, utilizzando (ad esempio)
DateTime.DateFormat = "dd/MM/yyyy"
e poi trasformarla in stringa (ad esempio):
Dim Oggi As String = DateTime.Date(DateTime.Now)
 

emexes

Expert
Licensed User
Se le stringhe di date sono sempre di 10 caratteri (8 cifre e 2 barre), un altro modo è quello di tagliare e tagliare a fette usando String.SubString2() eg:

B4X:
Sub ReverseDate(X As String) As String

    If X.Length = 10 Then
        Select X.IndexOf("/")
            Case 2:    'dd/mm/yyyy
                Return X.SubString2(6, 10) & X.SubString2(2, 6) & X.SubString2(0, 2)
               
            Case 4:    'yyyy/mm/dd
                Return X.SubString2(8, 10) & X.SubString2(4, 8) & X.SubString2(0, 4)
               
        End Select
    End If
   
    Log("Invalid date: " & X)

End Sub

Dim Dte As String = "2023/06/20"

Log("Original: " & Dte)  
Log("Reversed: " & ReverseDate(Dte))
Log("Original: " & ReverseDate(ReverseDate(Dte)))
 

Sagenut

Expert
Licensed User
Longtime User
Attenzione che con
B4X:
dd/mm/yyyy
mm minuscolo dovrebbe indicare i MINUTI.
 

klaus

Expert
Licensed User
Longtime User
As the original date format is known, I would do it like this.
Poiché il formato della data originale è noto, lo farei in questo modo

B4X:
    DateTime.DateFormat = "yyyy/MM/dd"
    Private Date = "2023/09/23" As String
    Log (Date)
    Private Ticks As Long
    Ticks = DateTime.DateParse(Date)
    DateTime.DateFormat = "dd/MM/yyyy"
    Date = DateTime.Date(Ticks)
    Log (Date)
 

dragonblu19

Member
Licensed User
Grazie a tutti per le vostre risposte e mi scuso se non ho usato i giusti termini nell'esporre il problema, ma non sono un esperto programmatore, più che altro è un hobby.
Cmq provo a rispondere alle vostra osservazioni.
Il campo nel db è impostato come Date quindi quando lo salva è in formato 2023/09/23.
Ora io quando lo vado a prendere lo inserisco in una label es lblDateEu e lo porto in quel formato.
Ora la stessa data la volevo riportare in un'altra label es lblDateIt nel formato 23/09/2023.
Spero (per quanto mi è possibile?) di aver esposto i dati in modo corretto.

Grazie a tutti.
 

Sagenut

Expert
Licensed User
Longtime User
Grazie a tutti per le vostre risposte e mi scuso se non ho usato i giusti termini nell'esporre il problema, ma non sono un esperto programmatore, più che altro è un hobby.
Cmq provo a rispondere alle vostra osservazioni.
Il campo nel db è impostato come Date quindi quando lo salva è in formato 2023/09/23.
Ora io quando lo vado a prendere lo inserisco in una label es lblDateEu e lo porto in quel formato.
Ora la stessa data la volevo riportare in un'altra label es lblDateIt nel formato 23/09/2023.
Spero (per quanto mi è possibile?) di aver esposto i dati in modo corretto.

Grazie a tutti.
La soluzione di @klaus al post 5 fa' esattamente quello che chiedi.
 

dragonblu19

Member
Licensed User
codice:
Sub popolaLista

    'qui prendo i dati dal db e li inserisco nelle label e li inserisce correttamente'

    edtNota.Text = actTabella.mDesc
    lblQuantitaIns.Text = actTabella.mQuan
    lblDateEu.Text = actTabella.mData

    'appena inserisco il codice mi da errore alla riga     Ticks = DateTime.DateParse(lblDateEu.Text)'

    DateTime.DateFormat = "yyyy/MM/dd"
    Private Ticks As Long
    Ticks = DateTime.DateParse(lblDateEu.Text)
    DateTime.DateFormat = "dd/MM/yyyy"
    lblDateIt.Text = DateTime.Date(Ticks)
    
End Sub

E nel log mi da il seguente errore;
java.text.ParseException: Unparseable date: "2023-06-02"

Grazie.
 

klaus

Expert
Licensed User
Longtime User
I gave you the answer with your information, you said that the format in the database is "yyyy/MM/dd".
As Erel answered, you need to adapt the original date format according to format in the database "yyyy-MM-dd".

Ti ho dato la risposta con le tue informazioni, hai detto che il formato nel database è "yyyy/MM/dd".
Come ha risposto Erel, è necessario adattare il formato della data originale in base al formato nel database "yyyy-MM-dd".
 

dragonblu19

Member
Licensed User
I gave you the answer with your information, you said that the format in the database is "yyyy/MM/dd".
As Erel answered, you need to adapt the original date format according to format in the database "yyyy-MM-dd".

Ti ho dato la risposta con le tue informazioni, hai detto che il formato nel database è "yyyy/MM/dd".
Come ha risposto Erel, è necessario adattare il formato della data originale in base al formato nel database "yyyy-MM-dd".
Salve, chiedo scusa, il suggerimento che mi avevi dato era esatto, solo che io nella mia ignoranza, avevo trascurato che "/" e "-" facessero la differenza.
Ho corretto e ora funziona tutto correttamente come mi serviva.

Grazie grazie.
 
Top