2014-12-04 3 views
0

Я извлекаю значение из моей базы данных смещения временной шкалы. Значение, которое я получаю, вовремя.Как разобрать строку смещения Timezone?

Например, это может быть "-5:00", "+7:30", "+3:00" и т.д.

Как преобразовать, что двойной, так что я могу сделать AddHours() вызов на DateTime объекта?

ответ

2

Используйте TimeSpan.Parse метод:

var time = "+7:30"; 
time = time.Replace("+", ""); // Remove the + if it is there. 

var hours = TimeSpan.Parse(time).TotalHours; 
0

John Koerner answer имеют несколько минусов;

  • на основе + или -, дополнительные операции со строками может быть необходимы. Он может обрабатывать - или без знака, но он не может обрабатывать символ +.
  • Поскольку его используется TimeSpan.Parse(string) перегрузки, если CurrentCulture «s TimeSeparator не : (Я знаю, что это редкий) этот метод бросает FormatException.

Кроме того, на них, я думаю, TimeSpan.Parse это не самый лучший способ для разбора UTC Offset. Действительно, Offset также является временным интервалом, но это значение может не всегда успешно анализироваться.

Я думаю, что лучший вариант: DateTimeOffset.TryParseExact method с zzz format specifier. Так как DateTimeOffset.Offset property возвращает его значение как TimeSpan, его вполне можно использовать с DateTime.

Например,

var s = "+05:30"; 
DateTimeOffset dto; 
var dtop = DateTimeOffset.TryParseExact(s, "zzz", 
       CultureInfo.InvariantCulture, 
       DateTimeStyles.None, out dto); 
var today = DateTime.Today; 
today = today.AddHours(dto.Offset.TotalHours); 

Это работает для всех possibile UTC Offset форматов (±[hh]:[mm], ±[hh][mm] или ±[hh]).

Смежные вопросы