- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
try
{
Int16 y = 0, m = 0, d = 0, hh = 0, mm = 0, ss = 0, ms = 0, zn = 0;
if (Value.IndexOf("T") > 0)
{
Int16.TryParse(Value.Substring(0, 4), out y);
Int16.TryParse(Value.Substring(4, 2), out m);
Int16.TryParse(Value.Substring(6, 2), out d);
Int16.TryParse(Value.Substring(9, 2), out hh);
Int16.TryParse(Value.Substring(11, 2), out mm);
Int16.TryParse(Value.Substring(13, 2), out ss);
Int16.TryParse(Value.Substring(16, 2), out ms);
Int16.TryParse(Value.Substring(18, 3), out zn);
dt = new DateTime(y, m, d, hh, mm, ss, ms, DateTimeKind.Utc);
}
if (Value.IndexOf("T") == 0)
{
Int16.TryParse(Value.Substring(0, 2), out hh);
Int16.TryParse(Value.Substring(2, 2), out mm);
Int16.TryParse(Value.Substring(4, 2), out ss);
Int16.TryParse(Value.Substring(7, 2), out ms);
dt = dt.AddHours(hh).AddMinutes(mm).AddSeconds(ss).AddMilliseconds(ms);
}
dt.AddHours(-zn);
catch (Exception ex)
{
Console.Write(this.Value + "\r\n" + ex.ToString());
}
return dt;
Разбор модифицированного iso 8601 формата даты и времени (без "-").
не учитавается наличие/отсуствие даты или времени, длинная тайм зона, то что если нет T то это не время а дата. Естественно все обернуто в try/catch что бы никто не догадался.
Так сказать особой утонченности придает строка dt.AddHours(-zn);
(сколько уйдет у кого секунд что бы понять что с ней не так?)