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 #

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top