2010-08-05 3 views
1

J'ai une colonne appelée mois dans un proc stocké qui me renvoie le mois en termes de nom de chaîne (par exemple Janvier, Février, Mars, etc.)Comment convertir les noms de mois en int?

Je voudrais convertir cela en un nombre entier. Est-ce possible sans utiliser seulement un certain nombre de déclarations de cas?

Je voudrais le faire dans .NET 3.5

+0

double possible de [Comment analyser un nom de mois (string) à un entier pour la comparaison en C#?] (http://stackoverflow.com/questions/258793/how-to-parse-a-month-name-string-to-an-integer-for-comparison-in- c) – Diskdrive

+0

http://stackoverflow.com/questions/258793/how-to-parse-a-month-name-string-to-an-integer-for-comparison-in-c/258828#258828 – Necros

Répondre

-1

Vous pouvez stocker Name-> cartographies numériques dans un tableau (regardez à travers le réseau jusqu'à ce que vous trouviez celui que vous voulez) ou une table de hachage (rechercher le nom du mois dans le hachage pour obtenir un nombre - avantages de soutenir un certain nombre de langues et d'abréviations, aussi). Je préfère stocker les informations dans les structures de données que dans le code, mais cela pourrait être mon propre comportement irrationnel.

EDIT

En réponse à @ peut-être il est comparé à une seule ligne que la plate-forme prend en charge roboshop de « sons comme beaucoup de travail », mais si vos clients vous demandent de soutenir des abréviations telles que " Jan », « Fe », « Mar », je pense à l'aide d'une structure de données donne beaucoup de flexibilité supplémentaire:

months = { "ja" => 1, "jan" => 1, "january" => 1, 
      "fe" => 2, "feb" => 2, "february" => 2, 
      "ma" => 3, "mar" => 3, "march" => 3, 
      "ap" => 4, "apr" => 4, "april" => 4, 
      "my" => 5, "may" => 5, 
      "jn" => 6, "jun" => 6, "june" => 6, 
      "jl" => 7, "jul" => 7, "july" => 7, 
      "au" => 8, "aug" => 8, "august" => 8, 
      "se" => 9, "sep" => 9, "sept" => 9, "september" => 9, 
      "oc" => 10, "oct" => 10, "october" => 10, 
      "no" => 11, "nov" => 11, "november" => 11, 
      "de" => 12, "dec" => 12, "december" => 12, 
      "januar" => 1, 
      "februar" => 2, 
      "märz" => 3, 
      "mai" => 5, 
      "juni" => 6, 
      "oktober" => 10, 
      "dezember" => 12} 

puts "Month %s is %d" % [ARGV[0], months[ARGV[0].downcase]] 

Bien sûr, maintenant, vous devez connaître les versions localisées de mois vos utilisateurs veulent, mais est beaucoup plus facile de soutenir les abréviations demandées.

+0

sonne comme un beaucoup de travail – Diskdrive

2

Vous pouvez utiliser DateTime.Parse puis obtenir la propriété du mois de la date:

string monthName = "January"; 
DateTime.Parse(String.Format("{0} 1, 2000", monthName)).Month 
0

Je suis venu par le biais de ce numéro récemment (sur le côté client en utilisant Javascript) et après quelques recherches sur internet, j'ai décidé de le faire moi-même. Bien que je l'ai fait en utilisant Javascript, je vais quand même vous donner une solution .net. Le Javascript premier:

function convertToIntMonth(monText) { 
//Your arrays for the valid months for which you can throw exception (I did not do it) if the parameter is out of these 12. 
     var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 
     var monInt; 
     for (i = 0; i < 12; i++) { 
//in this loop, we'll check for the match in parameter and array items. 
      if (monText == monthNames[i]) 
      { 
//If match is found, we'll return the +1 value of actual match (as month array's index goes from 0 to 11, and we require it from 1 to 12) 
monInt=i+1} 
     } 
     return monInt; 
    } 

Maintenant, le .NET (C#): N'a pas encore été testé, encore je l'espère, vous pouvez trouver la logique

public int convertToIntMonth(string monText) { 
     string[] monthNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 
     string monInt=0; 
     for (int i = 0; i < 12; i++) { 
      if (monText == monthNames[i]) 
      { monInt=i+1} 
     } 
     return monInt; 
    }