1. C# / Говнокод #3451

    +111

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 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);
    (сколько уйдет у кого секунд что бы понять что с ней не так?)

    Запостил: eval_2009, 10 Июня 2010

    Комментарии (3) RSS

    Добавить комментарий