2010-09-07 33 views
11

Hice una búsqueda rápida de esto y me sorprendió no encontrarlo en ningún lado.Convertir el nombre del mes a entero

Básicamente buscando convertir los nombres de los meses completos (enero, septiembre, etc.) al número equivalente que se usaría en formato mm/dd/aaaa.

Puedo armar mi propia matriz y sacarla en consecuencia, pero tiene que haber un método rápido y directo. ¿Derecha?

+1

la cantidad de caracteres que le habría llevado escribir el método de extensión probablemente sea igual a la longitud de su pregunta :) – epitka

+1

probablemente tenga razón. :) Pero de esta manera, le devuelvo a la comunidad ya que no fue fácil de encontrar en primer lugar. – Mercurybullet

Respuesta

14

Puede usar el formato de cadena MMMM para obtener el nombre completo del mes.

Consulte custom DateTime format strings en 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 

Si usted está basando esto en la entrada del usuario, creo que este es el más limpio (especialmente si usted está contando con múltiples culturas de utilizar este). DateTime.ParseExact le permitirá ingresar cualquier tipo de entrada y traducirlo a DateTime, luego eliminar cualquier parte que le interese.

Si, sin embargo, esto no se debe a la entrada del usuario, tendría que sugerir el uso de algún tipo de colección estática (ya sea un diccionario o una enumeración).

+0

iba a publicar el mismo código exacto ... – jeroenh

+0

Se ve bien, pero creo que debería ser monthName dentro de ParseExact. – Mercurybullet

+0

@Mercurybullet gracias, fijo. – bdukes

0

Llámame loco, pero ¿no es esto exactamente para lo que es una enum? Quizás valga la pena considerar mantener el código lo más simple posible. http://visualbasic.about.com/od/usingvbnet/a/enum01.htm

+1

Está loco: P –

+0

VB no es mi especialidad, pero, en general, no lo haría. agregue una biblioteca adicional únicamente para traducir 12 cadenas en números. Tal vez si hubiera otras funciones útiles allí ... – phreakocious

+0

Ya estoy usando la biblioteca DateTime para otras cosas, solo estaba buscando una forma integrada para hacer esta conversión. – Mercurybullet

-2

Esto puede sonar largo aliento, ¿por qué no utilizar un IF Statement o Select Case.

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

bien en mi caso he usado este truco

  1. Crear 2 cuadro combinado
  2. ComboBox1
  3. cosas con los nombres de los meses
  4. cosas ComboBox2 con años

y entonces este

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 
Cuestiones relacionadas