Проверка строки часового пояса и возврат ее в минутах - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть часовой пояс, полученный от пользователя, который необходимо преобразовать в общее количество минут для сохранения в базе данных. У меня есть следующий код, и это выглядит довольно некрасиво. Я новичок в C #, и мне было интересно, есть ли лучший способ сделать это.

    string tz = userList.Rows[0][1].ToString().Trim();
    //Timezones can take the form of + or - followed by hour and then minutes in 15 minute increments.
    Match tzre = new Regex(@"^(\+|-)?(0?[0-9]|1[0-2])(00|15|30|45)$").Match(tz);
    if (!tzre.success)
    {
        throw new
            myException("Row 1, column 2 of the CSV file to be imported must be a valid timezone: " + tz);
    }
    GroupCollection tzg = tzre.Groups;
    tz = Convert.ToInt32(tzg[0].Value + Convert.ToString(Convert.ToInt32(tzg[1].Value) * 60 + Convert.ToInt32(tzg[2]))).ToString();

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Это выглядит хорошо для меня. Я бы просто назвал группы (для ясности):

Match tzre = new Regex(@"^(?<sign>\+|-)?(?<hour>0?[0-9]|1[0-2])(?<mins>00|15|30|45)$").Match(tz);

И, возможно, измените ваше преобразование на:

tz = (tzg["sign"].Value == "+" || tzg["sign"].Value == "" ? 1 : -1) 
    * int.Parse(tzg["hour"].Value) * 60 
    + int.Parse(tzg["mins"])
0 голосов
/ 12 ноября 2009
string tz = userList.Rows[0][1].ToString().Trim();
//Timezones can take the form of + or - followed by hour and then minutes in 15 minute increments.
Match tzre = new Regex(@"^(\+|-)?(0?[0-9]|1[0-2])(00|15|30|45)$").Match(tz);
if (!tzre.Success)
{
    throw new
        myException("Row 1, column 2 of the CSV file to be imported must be a valid timezone: " + tz);
}
GroupCollection tzg = tzre.Groups;
tz = (new TimeSpan(int.Parse(tzg[1].Value + tzg[2].Value), int.Parse(tzg[3].Value), 0).TotalMinutes).ToString();
0 голосов
/ 12 ноября 2009

Попробуйте установить разные группы на

new TimeSpan(h, m, 0).TotalMinutes();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...