Giorno mese e anno da data

Buongiorno.
Come posso ricavare il giorno il mese e l’anno da una data inserite in una TextField ?
Grazie.

In genere un problema, visto che la data pu essere scritta in formati diversi a seconda della lingua.
Se la data viene scritta nel formato previsto dal locale (sequenza giorni mese anno) puoi usare:

dim d as Xojo.Core.Date=xojo.Core.Date.FromText(miotextField.text.toText, xojo.core.Locale.Current)

magari per sicurezza lo metti dentro un try catch per eventuali casi particolari

buongiorno.

chiedo se vi risulta che, per la classe Xojo.Core.Date, ci sia un metodo per impedire che una data errata sia trasformata automaticamente.

ad esempio (utilizzando FromText come sopra) la data errata 32/13/1932 viene trasformata in 1933-02-01 00:00:00, anzich produrre un’eccezione.

a me sembra di no. in tal caso, bisognerebbe gestire manualmente le stringhe errate?

grazie.

una cosa che avviene in molti linguaggi spesso utile.
In ogni caso puoi provare a ricavare a “mano” l’equivalente e verificare se i due testi (quello ricavato e quello toText ovvero sqlDateTime) corrispondono e in tal caso elevare tu l’eccezione.

grazie Antonio.

quindi devo fare a mano la routine di controllo per anno, mese, giorno, bisestili, etc.?

ma con la classe Date classic, il ParseDate gestiva la correttezza della stringa e sollevava l’eccezione, o sbaglio?

no, credo di aver capito.
se la stringa in input differisce dal risultato della FromText, la data errata.
ok?

Nella tua necessit si (potenzialmente errata)
ad esempio 29/02/2017 -> 01/03/2017
sono diverse (prima della scrittura e dopo l’interpretazione) per cui potenzialmente errata

Da un certo punto di vista no il 29 febbraio il primo giorno dopo il 28 e in un anno non bisestile questo il primo marzo.

Pi che segnalare un errore, userei un avvertimento (sicuro che la data sia questa?) ma dipende da scopo e interfaccia.

non avevo provato la FromText con i bisestili, ma l’ho appena fatto ed ho visto che sono gestiti.

ad esempio:
28/02/2017 -> 2017-02-28
29/02/2017 -> 2017-03-01
29/02/2016 -> 2016-02-29 bisestile
29/02/2000 -> 2000-02-29 bisestile (secolare e divisibile per 400)
29/02/1900 -> 1900-03-01 non bisestile (secolare e non divisibile per 400)

quindi, penso che il confronto tra le 2 date possa essere una buona soluzione.

grazie.