2010-09-07 3 views
11

Ho fatto una rapida ricerca per questo e sono rimasto sorpreso di non trovarlo da nessuna parte.Conversione del nome del mese in intero

Fondamentalmente cercando di convertire i nomi dei mesi interi (gennaio, settembre, ecc.) Al numero equivalente che verrebbe utilizzato nel formato mm/gg/aaaa.

Posso mettere insieme il mio array e tirarlo fuori di conseguenza, ma ci deve essere già un metodo rapido e diretto. Destra?

+1

la quantità di caratteri che avrebbe richiesto di scrivere il metodo di estensione è probabilmente uguale alla lunghezza della tua domanda :) – epitka

+1

probabilmente hai ragione. :) Ma in questo modo, posso dare indietro alla comunità poiché non era facile da trovare in primo luogo. – Mercurybullet

risposta

14

È possibile utilizzare la stringa di formato MMMM per il nome completo del mese.

Vedere custom DateTime format strings su MSDN.

Dim fullMonthName as DateTime 
fullMonthName = DateTime.ParseExact("26 January 2010", "dd MMMM yyyy", 
              CultureInfo.InvariantCulture) 
18
Dim monthName = "September" 
Dim monthNumber = DateTime.ParseExact(monthName, "MMMM", CultureInfo.CurrentCulture).Month 

Se si sta basando questo su input dell'utente, credo che questo è il più pulito (soprattutto se vi aspettate molteplici culture per utilizzare questo). DateTime.ParseExact ti consentirà di inserire qualsiasi tipo di input e di tradurlo in uno DateTime, quindi rimuovere qualsiasi parte di esso ti interessi.

Se, tuttavia, questo non è presente sull'input dell'utente, dovrei suggerire di utilizzare una sorta di raccolta statica (che sia un dizionario o un enum).

+0

stava per pubblicare lo stesso codice esatto ... – jeroenh

+0

Sembra buono, ma penso che dovrebbe essere monthName all'interno del ParseExact. – Mercurybullet

+0

@Mercurybullet grazie, risolto. – bdukes

0

Chiamami pazzo, ma non è esattamente ciò per cui è un enum? Forse vale la pena considerare di mantenere il codice il più semplice possibile. http://visualbasic.about.com/od/usingvbnet/a/enum01.htm

+1

Sei pazzo: P –

+0

VB non è la mia specialità, ma in generale, non lo farei aggiungi una libreria aggiuntiva esclusivamente per tradurre 12 stringhe in numeri. Forse se ci fossero altre utili funzioni ... – phreakocious

+0

Sto già usando la libreria DateTime per altre cose, stavo solo cercando un modo integrato per fare questa conversione. – Mercurybullet

-2

Questo può sembrare prolisso, perché non utilizzare un'istruzione IF o Select Case.

If Month = "January" Then MonthNum = "1" 
Else If Month = "February" Then ....... 
0

bene nel mio caso ho usato questo trucco

  1. Creare 2 combobox
  2. roba ComboBox1 con i nomi dei mesi
  3. roba ComboBox2 con anni

e poi questo

Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged 
     MsgBox(System.DateTime.DaysInMonth(ComboBox2.Text, ComboBox1.SelectedIndex + 1), MsgBoxStyle.Information) 
    End Sub