Как я могу получить смещение как TimeSpan, если у меня есть только время в виде строки, например 09:00 AM - PullRequest
0 голосов
/ 10 октября 2009

У меня есть строка "9:00 AM". Я хотел бы получить смещение от полуночи как TimeSpan в C #?

Ответы [ 4 ]

5 голосов
/ 10 октября 2009

9:00 AM - пунктуальное время, в то время как TimeSpan структура представляет временные интервалы, поэтому вы пытаетесь преобразовать яблоки в апельсины.

3 голосов
/ 10 октября 2009

TimeSpan? Временной интервал - это просто период времени. «AM» показывает, что это определенное время, поэтому это не может быть промежуток времени. Или вы хотите проанализировать «9:00» без «AM» и получить в результате время 9 часов?

@ Ваш комментарий:

Вы можете использовать метод, который сделает это за вас. Вот простой пример реализации (вам нужно добавить лучшую проверку ввода, использовать лучшие методы преобразования, чем просто Convert.ToInt32 () и т. Д.):

public static TimeSpan GetTimeSpanFormString(string strString)
{
    strString = strString.Trim();
    string[] strParts = strString.Split(':', ' ');

    int intHours, intMinutes;

    if (strParts.Length != 3)
        throw new ArgumentException("The string is not a valid timespan");

    intHours = strParts[2].ToUpper() == "PM" ? Convert.ToInt32(strParts[0]) + 12 : Convert.ToInt32(strParts[0]);
    intMinutes = Convert.ToInt32(strParts[1]);

    return new TimeSpan(intHours, intMinutes, 0);
}
2 голосов
/ 10 октября 2009

Если вы хотите смещение от полуночи, вы можете использовать:

  DateTime dateTime = DateTime.ParseExact( strValue, "h:mm tt" );
  TimeSpan offset = dateTime - DateTime.Today;
0 голосов
/ 10 октября 2009
TimeSpan.TryParse(yourString, out yourTimeSpan);
...