294 messaggi dal 14 novembre 2001
Sto provando a migrare un sito (basato su webform, pagine aspx) da un server locale ad AWS Amazon e ho questo problema, è da due giorni che ci sbatto la testa (faccio notare che nel server in locale gira tutto alla perfezione):

In un .vb file, in una classe dove ho creato varie funzioni e sub, la semplice dichiarazione:

Dim CertaData AS Date = "31/01/2017"
mi dà errore, dice che non è possibile convertire quella stringa in data

Questa stessa riga, all'interno di un'altra pagina .aspx, sempre se aws amazon, viene regolarmente letta.


Specifico che nella Web.config è presente
<globalization uiCulture="it" culture="it-IT" />


Ho provato anche a rispecificare "CultureInfo" a runtime nella singola pagina .VB, prima di Dim CertaData AS Date = "31/01/2017", con

Dim newCulture As CultureInfo
newCulture = New CultureInfo("it-IT")

oppure ancora CDate("31/01/2017") e altre funzioni simili o più complesse...

NULLA, errore! La cosa che mi dà più fastidio è che poi in un'altra pagina web del medesimo website in aws la dichiarazione della variabile viene letta senza problemi.

L'unico modo per non farlo andare in errore lì è stato mettendo la data non italiana:
Dim CertaData AS Date = "01/31/2017"


Avreste qualche suggerimento da darmi?
Modificato da maurodii il 02 febbraio 2017 22.24 -
Modificato da maurodii il 02 febbraio 2017 22.25 -

Campo Testaccio, c'hai tanta gloria...
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
usa questo specifico costruttore di DateTime. Così non ci sarà possibilità di errore nell'interpretazione.

Dim CertaData As New Date(2017, 1, 31)


Oppure quest'altro, che ti permette di indicare se si tratta di una data nel fuso orario locale o una data UTC.
Dim CertaData As New Date(2017, 1, 31, 0, 0, 0, DateTimeKind.UTC)


Nel caso in cui la stringa della data non sia cablata nel codice ma ti arrivi dal form come input dell'utente, allora dovrai necessariamente parsarla. Prova ad indicare esplicitamente la CultureInfo italiana con DateTime.Parse.
Dim cultureInfo = System.Globalization.CultureInfo.GetCultureInfo("it-IT")
Dim data As DateTime = DateTime.Parse("31/01/2017", cultureInfo)


ciao,
Moreno

Enjoy learning and just keep making
294 messaggi dal 14 novembre 2001
Ieri ho provato con un'altra strada, mi sembrava di aver ottenuto un buon risultato ma non ho avuto molto tempo, anche perché ogni volta per testarla in AWS devo ripubblicare il progetto e fare il deploy lì... insomma si perde tempo :)

Tuttavia la soluzione da te indicata, la prima, mi sembra migliore perché non mi farebbe fare quasi nessuna modifica al codice attuale. La data la prendo in un campo string di una tabella, dove memorizzo i nomi dei file csv che devo caricare quotidianamente (XXXXX_01_01012017_ALTRICARATTERI.csv.gz)

Grazie come sempre, certo se inizio a studiare MVC come mi hai suggerito, povero te :P
Buon fine settimana a tutti

Campo Testaccio, c'hai tanta gloria...
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


La data la prendo in un campo string di una tabella

Le date vanno in campi date o datetime :)


i nomi dei file csv che devo caricare quotidianamente (XXXXX_01_01012017_ALTRICARATTERI.csv.gz)

A questo punto forse ti conviene ottenere la data direttamente dal nome del file usando DateTime.ParseExact, che ti permette di indicare l'esatto formato usato.
Dim nomeFile = "XXXXX_01_01012017_ALTRICARATTERI.csv.gz"
Dim dataFormattata = nomeFile.Split("_")(2)
Dim data = DateTime.ParseExact(dataFormattata, "ddMMyyyy", Nothing)



certo se inizio a studiare MVC come mi hai suggerito, povero te :P

Se ho tempo libero ti rispondo volentieri ogni volta. Più dettagliatamente è presentata la questione e più è probabile che succeda :D

ciao,
Moreno
Modificato da BrightSoul il 04 febbraio 2017 10.27 -

Enjoy learning and just keep making
294 messaggi dal 14 novembre 2001


BrightSoul ha scritto:
....
i nomi dei file csv che devo caricare quotidianamente (XXXXX_01_01012017_ALTRICARATTERI.csv.gz)

A questo punto forse ti conviene ottenere la data direttamente dal nome del file usando DateTime.ParseExact, che ti permette di indicare l'esatto formato usato.
...
Dim data = DateTime.ParseExact(dataFormattata, "ddMMyyyy", Nothing)



Posso riprovare, ma la riga con l'istruzione ParseExact (avevo provato anche CDate e altre funzioncine)
Dim data = DateTime.ParseExact....

è proprio quella che mi ha fatto impazzire, che funzionava nelle altre pagine aspx del sito ma NON nella pagina .vb dentro cartella App_Code!


A dire il vero io non mettevo Nothing alla fine ma facevo così:
Dim data = DateTime.ParseExact(dataFormattata, "ddMMyyyy", CultureInfo.InvariantCulture)
oppure
Dim data = DateTime.ParseExact(dataFormattata, "ddMMyyyy", new CultureInfo("it-IT"))

Campo Testaccio, c'hai tanta gloria...
11.886 messaggi dal 09 febbraio 2002
Contributi

è proprio quella che mi ha fatto impazzire, che funzionava nelle altre pagine aspx del sito ma NON nella pagina .vb dentro cartella App_Code!

Posta l'esatto errore che ottieni. Probabilmente è diverso l'input che stai fornendo al metodo (es. stringa non conforme al formato ddMMyyyy).

Enjoy learning and just keep making
294 messaggi dal 14 novembre 2001
Questo era l'errore che mi dava:

Argument 'DateValue' cannot be converted to type 'Date',

perché inspiegabilmente (almeno per me :P) nella sola pagina nome.VB nella cartella App_Code viene ignorata questa impostazione della web.config:

<globalization culture="it-IT" uiCulture="it" requestEncoding="latin9" responseEncoding="latin9" />


Nelle altre pagine del sito invece no!

Quindi in quella pagina la data del primo febbraio viene restituita così:
2/1/2017


Ho risolto usando la funzione da te suggerita, unitamente alla reimpostazione a runtime di CultureInfo:

esempio:
Dim SettaggioCulture As CultureInfo = CultureInfo.CreateSpecificCulture("it-IT")
Thread.CurrentThread.CurrentCulture = SettaggioCulture
Thread.CurrentThread.CurrentUICulture = SettaggioCulture
DateTime.Parse(DateAdd("d", -1, Now.ToString("dd/MM/yyyy")), SettaggioCulture)


Ancora grazie ;)

Campo Testaccio, c'hai tanta gloria...
3.939 messaggi dal 28 gennaio 2003
ho provato a replicare l'errore e purtroppo non ci sono riuscito.

Nel senso che, nel web.config imposto la globalizzazione it-IT o en-US

e in un file del App_Code la conversione avviene tenendo conto dell'impostazione del web.config

ps. intervengo perché certi errori strani possono capitare a chiunque, e la risoluzione può essere interessante per molti.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.