Как мне преобразовать названия месяцев в int? - PullRequest
1 голос
/ 05 августа 2010

У меня есть столбец с именем Месяц в сохраненном процессе, который возвращает мне месяц в терминах имен строк (например, январь, февраль, март и т.

Я хотел бы преобразовать это в целое число.

Возможно ли это без использования нескольких операторов выбора регистра?

Я бы хотел сделать это в .NET 3.5

Ответы [ 4 ]

2 голосов
/ 05 августа 2010

Вы можете использовать DateTime.Parse, а затем получить свойство Month для даты:

string monthName = "January";
DateTime.Parse(String.Format("{0} 1, 2000", monthName)).Month
0 голосов
/ 14 декабря 2012

Недавно я столкнулся с этой проблемой (на стороне клиента с использованием Javascript), и после нескольких поисков в Интернете я решил сделать это сам. Хотя я сделал это с помощью Javascript, я все же дам вам решение .net. Сначала Javascript:

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;
    }

Теперь .NET (C #): еще не тестировал, все же я надеюсь, что вы найдете логику

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;
    }
0 голосов
/ 05 августа 2010

В SQL Server сделайте это SELECT DATEPART(month, GETDATE())

Также дубликат этого вопроса Как разобрать название месяца (строку) в целое число для сравнения в C #?

0 голосов
/ 05 августа 2010

Вы можете хранить сопоставления имен-> чисел в массиве (просматривайте массив, пока не найдете нужный) или хеш (ищите имя месяца в хеш-коде, чтобы получить число - преимущества от поддержки любого числа языки и сокращения тоже). Я предпочел бы хранить информацию в структурах данных, а не в коде, но это может быть просто моим собственным иррациональным поведением.

EDIT

В ответ на @ roboshop «Звучит как большая работа», возможно, его сравнивают с однострочными, которые поддерживает платформа, но если ваши клиенты просят вас поддержать такие сокращения, как «Jan», «Fe», « Мар ", я думаю, использование структуры данных дает большую дополнительную гибкость:

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]]

Конечно, теперь вы должны знать локализованные версии месяцев, которые нужны вашим пользователям, но гораздо проще поддерживать запрошенные сокращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...