Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314

    [VBA Access 2000] Conversione del formato della Data

    Voglio imparare ad usare VBA e giusto per avere un' "obiettivo" stò cercando di realizzare l' equivalente di un mio programma in VB.NET.
    In quest' ultimo, ho una textbox in cui va inserita una data che deve essere utilizzata nel formato "dd/mm/yyyy", quindi via codice ho previsto di convertire il testo digitato come "ddmmyy" o "ddmmyyyy" in "dd/mm/yyyy".
    In VBA, da "dd/mm/yyyy" a "ddmmyyyy" otttengo il valore corretto, viceversa no...:
    codice:
    Private Sub test_data()
    Dim a As String
    Dim b As String
    Dim a_out As String
    Dim b_out As String
    a = "01/01/2001"
    b = "01012001"
    a_out = Format(a, "ddmmyyyy")
    b_out = Format(b, "dd/mm/yyyy")
    Debug.Print a & " = " & a_out
    Debug.Print b & " = " & b_out
    End Sub
    Il risultato del codice è:

    01/01/2001 = 01012001
    01012001 = 05/10/4670 .............

    Dopo varie ricerche non sono riuscito a capire quale sia il mio errore, mentre per risolverlo stavo pensando di contare i caratteri e di conseguenza modificare la stringa nel modo appropriato.
    Qualche consiglio o info?
    Grazie!

  2. #2
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    semplicemente "01012001" non è una data

    quindi il format sbaglia
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  3. #3
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Eh con le date c'è da uscire pazzi, soprattutto se si lavora solo con le stringhe (ancora di più se usi DateTime).

    01/02/2012
    010212
    01022012
    01.02.12
    1.2.2012
    01-02-2012
    01-02-12

    Detto tra noi, se fossi in te mi costruirei una bella funzione che prende una stringa in uno di
    questi formati e restituisce una stringa gg/mm/aaaa o come piace a te.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Si diventa pazzi quando ci si inventa codice astruso, e non si conoscono le 'regole della programmazione'.
    Non serve alcuna nuova funzione, ci mancherebbe, con tutte quelle che esistono già.
    Basta studiarne l'uso, invece di arrampicarsi sugli specchi.

  5. #5
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Gibra, è' una cosa molto divertente creare funzioni "ad hoc" ed in più non è vero che ciò dimostra di non conoscere la programmazione. Anzi... bisogna proprio conoscerla!
    ...se poi tu conosci qualche metodo del .NET Framework 4.0 che faccia esattamente quello che ho detto io faccelo sapere, tanto di guadagnato.
    Un abbraccio.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da escocat
    ...se poi tu conosci qualche metodo del .NET Framework 4.0
    Stiamo parlando di VBA qui.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Ah già scusate...

    Errata Corrige:
    ...e se poi tu conosci qualche diavoleria VBA che faccia ecc. ecc. me la dici e io me la trasformo in C#

  8. #8
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da kalosjo
    semplicemente "01012001" non è una data quindi il format sbaglia
    Cioè, non è un formato supportato?
    01012001 per diventare 05/10/4670 come viene interpretato?
    ...non fraintendetemi...voglio solo capire!

    Originariamente inviato gibra
    Si diventa pazzi quando ci si inventa codice astruso, e non si conoscono le 'regole della programmazione'.
    Non serve alcuna nuova funzione, ci mancherebbe, con tutte quelle che esistono già.
    Basta studiarne l'uso, invece di arrampicarsi sugli specchi.
    Ho cercato cosa studiare...ma forse ho cercato male...help me!!!

    Per escocat, copio/incollo il codice in vb.net che ho scritto:
    codice:
       Dim dataconv As String = TextBox_data.Text
       Try
           Dim formats As String() = New String() {"ddMMyy", "ddMMyyyy", "dd/MM/yy"}
           Dim result = DateTime.ParseExact(dataconv, formats, _
                            System.Globalization.CultureInfo.CurrentCulture, _
                            System.Globalization.DateTimeStyles.None)
           TextBox_data.Text = CStr(result)
        Catch ex As System.Exception
            'messaggio di avviso
        End Try
    Dove 'formats' è la "maschera" che contiene i formati in input, qui ti puoi sbizarrire...

    Comunque, partendo dal presupposto di kalosjo, in VBA per ora ho scritto questo:
    codice:
    Private Sub test_data()
        Dim a(2) As String
        Dim a_out As String
        a(0) = "010101"
        a(1) = "01/01/01"
        a(2) = "01012001"
        For i = 0 To UBound(a)
            a_out = ""
            Select Case Len(a(i))
                Case 6
                    a_out = Format(a(i), "00/00/00")
                    a_out = Format(a_out, "dd/mm/yyyy")
                    Debug.Print "caso 010101  : " & a(i) & " = " & a_out
                Case 8
                    If Mid(a(i), 3, 1) = "/" Then
                        a_out = Format(a(i), "dd/mm/yyyy")
                        Debug.Print "caso 01/01/01: " & a(i) & " = " & a_out
                    Else
                        a_out = Format(a(i), "00/00/0000")
                        Debug.Print "caso 01012001: " & a(i) & " = " & a_out
                    End If
            End Select
        Next i
    End Sub
    Il risultato è:

    caso 010101 : 010101 = 01/01/2001
    caso 01/01/01: 01/01/01 = 01/01/2001
    caso 01012001: 01012001 = 01/01/2001

    Al codice manca la verifica se la stringa è una data valida, che ho omesso per non allungare ancora il post...

    Scusate la lunghezza, l' OT in vb.net...e l' ignoranza...ringrazio per ogni parere/consiglio/spunto che mi vorrete dare.

    Vincenzo

  9. #9
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    format("0","dd/mm/yyyy") restituisce "30/12/1899"

    Credo che 01012001 siano esattamente il numero di giorni dal 30/12/1899 al 05/10/4670 (ovviamente lo zero iniziale non si considera....)

    Una sorta di timestamp sballato di linux
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  10. #10
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da kalosjo
    format("0","dd/mm/yyyy") restituisce "30/12/1899"

    Credo che 01012001 siano esattamente il numero di giorni dal 30/12/1899 al 05/10/4670 (ovviamente lo zero iniziale non si considera....)

    Una sorta di timestamp sballato di linux
    Grazie! Ho fatto un paio di prove, ad intuito, ho visto + o - come gira l' "ingranaggio":

    codice:
    Debug.Print Format("0", "dd/mm/yyyy")
    Debug.Print Format("365", "dd/mm/yyyy")
    Debug.Print Format("729", "dd/mm/yyyy")
    Debug.Print Format("730", "dd/mm/yyyy")
    Debug.Print Format("1,1,1", "dd/mm/yyyy")
    Debug.Print Format("19,07,10", "dd/mm/yyyy")
    Debug.Print Format("31,12,12", "dd/mm/yyyy")
    Debug.Print Format("32,12,12", "dd/mm/yyyy")
    Risultato:
    30/12/1899
    30/12/1900
    29/12/1901
    30/12/1901
    01/01/2001
    19/07/2010
    31/12/2012
    12/12/1932

    Mi sono fatto un' idea su cosa cercare ma data l' ora e l' afa non ho le forze....vedrò domani se trovo della documentazione su msdn.
    Grazie ancora.

    Vincenzo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.