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

    −1

    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
    33. 33
    static string[] nums = new string[60] {
                "00", "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", "33", "34", "35", "36", "37", "38", "39",
                "40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
                "50", "51", "52", "53", "54", "55", "56", "57", "58", "59"
            };
    
            /// <summary>
            /// Форматирует дату в dd.MM.yyyy
            /// </summary>
            /// <param name="date"></param>
            /// <returns></returns>
            public static string ShortRuDateStr(ref DateTime date)
            {
                return string.Concat(nums[date.Day], ".", nums[date.Month], ".", YearToString(date.Year));
            }
    
    
            /// <summary>
            /// Возвращает текущую дату в формате yyyyMMddHHmmss
            /// </summary>
            /// <returns></returns>
            public static string Timestamp(ref DateTime date)
            {
                return string.Concat(YearToString(date.Year), nums[date.Month], nums[date.Day], nums[date.Hour], nums[date.Minute], nums[date.Second]);
            }
    
            public static string YearToString(int year)
            {
                return year.ToString().PadLeft(4, '0');
            }

    Запостил: michael443959, 13 Июля 2017

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

    • показать все, что скрытоОтсоси, псина.
      Ответить
    • new string[60] // [60] можно не писать, ололо
      Ответить
    • public static string Timestamp(ref DateTime date)
      {
      return String.Format("{0:D4}{1:D2}{2:D2}{3:D2}{ 4:D2}{5:D2}", date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second);
      }

      public static string ShortRuDateStr(ref DateTime date)
      {
      return String.Format("{0:D2}.{1:D2}.{2:D4}", date.Day, date.Month, date.Year);
      }
      Ответить
    • Ха!

      static string nums = "0001020304 .... 5859";
      ... nums[date.Day * 2], nums[date.Day * 2 + 1]
      Ответить
    • Деблы, бля.
      date.ToString("dd.MM.yyyy");
      date.ToString("yyyyMMddHHmmss");
      date.ToString("yyyy");
      Ответить
    • Ни разу не говнокод. Эта реализация работает в два раза быстрее стандартного форматтера.
      Для 1kk итераций:
      "говнокод" - 324 ms
      date.ToString("yyyyMMddHHmmss") - 597 ms
      return String.Format("{0:D4}{1:D2}{2:D2}{3:D2}{ 4:D2}{5:D2}", date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second); - 1623 ms (Вот где говнокод-то сокрыт)
      Ответить
      • Посмотрел апишку C#, похоже, там лажа: нет способа распарсить шаблон ровно один раз и форматировать им несколько раз, каждый вызов ToString() вынужден парсить строку формата заново. Вот почему сишарпные апишки такие черезжопные?

        В джава есть SimpleDateFormat, который компилирует и валидирует шаблон ровно один раз. Тут, правда, Java тоже выделилась: SimpleDateFormat умудрились сделать не потокобезопасным. Ну не мудаки ли?
        Ответить
        • мну наебался в децтве об потоконебезопасность SimpleDateFormat.
          Компилированный паттерн хотелось сделать static final, ну я и сделал. А потом случился сурприз.

          Я согласен что сисярп тут не прав (точнее не сишарп, а .NET потому что структура DateTime и ее .ToString (String) это часть .NET), но можно я не поверю что кто-то реально страдает из за такого вот продолба производительности?
          Ответить
      • >>Эта реализация работает в два раза быстрее стандартного форматтера.
        Какие у Вас интересные ботлл-неки в проекте. Не думали переписать форматирование даты на си с использованием SSE4 ?
        Ответить
        • Сарказм неуместен. Подобное форматирование, наиболее вероятно, использовалось при трассировке или логировании. В таких случаях производительность важнее пары лишних строк.
          Ответить
          • Зачем делать трассировку в текстовом виде??
            Ответить
            • Тем более на винде, где даже логирование предлагается делать в бинарном формате (и потом регать в Event Log провайдер чтобы его рашифровывать)

              А уж трассировать нужно с помощью EWT. Оно дико быстрое и конечно бинарное.
              Ответить
              • > ETW
                > дико быстрое...
                ...и дико неудобное в плане просмотра и разбора полётов.
                Ответить
                • Как старый поклонник WPT (aka xperf) я бы не согласился...
                  Ответить
                  • > Как старый поклонник WPT

                    Интересно, я единственный прочитал это как "Как старый поклонник WCT"?
                    Ответить
                    • А мне кажется что WCT великолепен

                      Для примера напишем простейшую программу с бесконечным инкрементом регистра AX (сначала в машинных кодах):

                      EAPLONEAPLOKEAPLOHEAPLOE
                      Ответить
                      • EAPLO NE APLOKE, APLO HE APLOE!
                        Ответить
                        • Напоминает лозунги баскских сепаратистов.

                          EUSKADI EZ DA ISPAINIA!

                          Или что-нибудь на албанском или на каком-нибудь другом малоизвестном языке.
                          Ответить
                        • Вставил в Гуглопереводчик, он подсказал, что «ΑΠΛΕΣ» с греческого переводится как «простой».

                          απλά = просто
                          απώλεια = потеря
                          Ответить
          • Трассировать на винде нужно вот этим:
            https://msdn.microsoft.com/en-us/library/windows/desktop/aa363668(v=vs.85).aspx
            .

            Если хочется трассировать текстовыми строками то надо идти писать на пхп
            Ответить

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