Conversione di dati di testo in data
-
22-07-2019 - |
Domanda
Ho una situazione in cui ho bisogno di convertire un dato di testo in data.
Ho usato il seguente codice per farlo!
string s = textBox1.Text;
if (String.IsNullOrEmpty(s))
{
textBox2.Text = "Please enter any date.";
}
else
{
DateTime dt = DateTime.Parse(s);
string day = dt.Day.ToString();
string month = dt.Month.ToString();
string year = dt.Year.ToString();
s = day + "/" + month + "/" + year;
textBox2.Text = s;
}
Questo cambierà solo i seguenti formati di dati.
10/10/09 o 10/10/2009 ---- data convertita ------ 10/10/2009
13/12/2009 o 13/12/9 ---- data convertita ------- 13/12/2009
16/10 ---- data convertita ----------------------- 16/10/2009
2009/12/10 ---- data convertita ------------------ 10/12/2009
I seguenti formati non vengono modificati in gg / mm / aaaa
16/10-gg / mm
060209 o 06022009 ddmmyyyy
13122009 mmddyyyy
20091213 yyyymmdd
20091312 yyyyddmm
20.07.2009 / 20.07.2009 / 20-07-2009 / 20-07-09
Qualcuno può aiutarmi con questo. Sono molto nuovo in c #
Soluzione 7
Grazie per tutto il supporto e la guida che hai fornito. Ho trovato la soluzione alla mia query
Una nuova casella di testo viene creata esplicitamente e utilizzando la funzione ParseExact il valore DateTime viene creato per la conversione.
Di seguito è riportato il modulo utilizzato. alt text http: //img146.imageshack .us / img146 / 2107 / form.jpg
Il codice è scritto di seguito
private void button1_Click(object sender, EventArgs e)
{
string s = textBox1.Text;
string DFF = textBox3.Text;
//To check whether field is empty
if (String.IsNullOrEmpty(s))
{
MessageBox.Show("Please enter correct date");
textBox2.Text = "Enter correct date";
}
else
{
DateTime dt = DateTime.ParseExact(s, DFF, null);
textBox2.Text = dt.ToShortDateString();
}
}
Questo codice fornirà un output per tutti i tipi di data:
gg.mm.aaaa o gg-mm-aaaa o gg \ mm \ aaaa
mm.dd.yyyy o mm-dd-yyyy o mm \ dd \ yyyy
aaaa.mm.dd o aaaa-mm-gg o aaaa \ mm \ gg
aaaa.dd.mm o aaaa-gg-mm o aaaa-mm-gg
ddmmyy o mmddyy o yyddmm
gg \ mm o mm \ gg o gg.mm o mm.dd
Altri suggerimenti
Le date di analisi sono un po 'più complicate di così, temo. Dipenderà dalle impostazioni della tua cultura / nazione. Guarda i sovraccarichi di DateTime.Parse .. .
Si noti inoltre che quando si emette la data, è possibile / utilizzare anche String.Format , in questo modo:
String.Format("{0:dd/MM/yyyy}", dt)
In primo luogo, sarebbe probabilmente più elegante se tu dovessi usare il metodo DateTime.ToString
con una stringa di formato che specifica il modulo in cui vuoi che appaia la stringa di data (le informazioni su questo possono essere trovato qui ).
Per quanto riguarda il motivo per cui gli altri formati specificati non vengono analizzati correttamente in un oggetto DateTime
, probabilmente è necessario utilizzare DateTime.Parse (stringa, IFormatProvider)
variante e definire il proprio IFormatProvider per questo. Potresti trovare questo l'articolo MSDN potrebbe essere utile per questo.
Dovrai scrivere la tua analisi per tutti i formati non standard. Anche formati come " yyyymmdd " e "yyyyddmm" sarà problematico, poiché avrai bisogno che l'utente specifichi qual è il formato di input o, in alcuni casi, ti convertirai in modo sbagliato.
Per il resto, dai un'occhiata a DateTime.Parse (menzionato anche da Benjol) dovrebbe risolvere il tuo problema per i formati comuni utilizzati in tutto il mondo.
DateTime.Parse non può probabilmente analizzare tutte le combinazioni specificate. Ti suggerirei prima di provare DateTime. TryParse per vedere se la data di input è analizzabile. Se restituisce false, utilizzare ParseExact (o meglio, TryParseExact) per verificare ogni formato di data previsto.
Sfortunatamente non penso che ci sia una soluzione unica per questo problema.
Puoi usare DateTime.ParseExact
Ad esempio:
DateTime.ParseExact("20090823", "yyyyMMdd", null);
DateTime.ParseExact("16/10", "dd/MM", null);
Modifica: Usa DateTime. TryParse (o DateTime. TryParseExact ) per convalidare la data inserita.
DateTime date;
string error = "";
if (!DateTime.TryParse("12978434", out date))
{
error = "Invalid date";
}
È possibile utilizzare un controllo 'DatePicker' / Calendario anziché una casella di testo?
es. AJAX Toolkit Calendar control
Ciò eliminerebbe la necessità di dover gestire ogni possibile formato data che un utente potrebbe potenzialmente specificare. Fornisce inoltre un'esperienza utente IMHO più piacevole.
Aggiorna dopo il commento OP:
Come altri poster hanno suggerito, vorrei utilizzare DateTime. TryParse come primo passaggio, per gestire le stringhe di date in uno qualsiasi dei formati standard supportati. Quindi è necessario eseguire il fallback su DateTime.ParseExact per ciascun formato non standard supportato. Infine, suppongo che sia necessario contrassegnare un errore per eventuali stringhe non di data o formati di data non opportuni.