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

    +139

    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
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    private int GetMaxDayValue(int month, int year)
        {
            int value = 0;
            switch (month)
            {
                case 1:
                    value = 31;
                    break;
                case 2:
                    switch (year)
                    {
                        case 2008:
                            value = 29;
                            break;
                        case 2009:
                            value = 28;
                            break;
                        case 2010:
                            value = 28;
                            break;
                        case 2011:
                            value = 28;
                            break;
                        case 2012:
                            value = 29;
                            break;
                        case 2013:
                            value = 28;
                            break;
                        case 2014:
                            value = 28;
                            break;
                        case 2015:
                            value = 28;
                            break;
                        case 2016:
                            value = 29;
                            break;
                    }
    
                    break;
                case 3:
                    value = 31;
                    break;
                case 4:
                    value = 30;
                    break;
                case 5:
                    value = 31;
                    break;
                case 6:
                    value = 30;
                    break;
                case 7:
                    value = 31;
                    break;
                case 8:
                    value = 31;
                    break;
                case 9:
                    value = 30;
                    break;
                case 10:
                    value = 31;
                    break;
                case 11:
                    value = 30;
                    break;
                case 12:
                    value = 31;
                    break;
            }
            return value;
        }

    Кусок кода из активно используемого корпоративного приложения :)

    Запостил: TasmX, 11 Августа 2011

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

    • На смену проблеме 2000 пришла проблема февраля 2017!
      Ответить
    • а почему только 2008-2016? срок годности приложения выйдет?
      Ответить
      • Программист себе работу на 2017 заготовил, очень предприимчивый.
        Ответить
    • показать все, что скрытоИ кстати. Лучше сделать так:
      switch (year)
                      {
                          case 2008:
                              value = 29;
                              break;
                          case 2012:
                              value = 29;
                              break;
                          case 2016:
                              value = 29;
                              break;
                          case 2020:
                              value = 29;
                              break;
                          case 2024:
                              value = 29;
                              break;
                          default:
                              value = 28;
                              break;
                      }


      Конечно если человек принципиально не использует %...
      Ответить
    • Каждый говнокодер должен изобрести свой велосипед с квадратными колесами, и потом всю жизнь допиливать их напильником ...
      int daysInFeb = DateTime.DaysInMonth(2011, 2);
      Ответить
      • Не гоже дяденька у КО работу отбирать!
        Ответить
      • Такими решениями Вы усугубляете мировой кризис, оставляя быдлокодеров без работы.
        Ответить
    • удобно, расширяемо и без работы не останешься.

      а вдруг проведут очередную нанореформу и календарь изменится?
      Ответить
      • Отныне в феврале 28 целых и 25 сотых дня!
        Реформа была введена т.к. министр обороны опередил общепринятый календарь на неделю и часто пропускал собрания.
        Ответить
      • Внезапно: http://ru.wikipedia.org/wiki/30_февраля
        Ответить
    • DateTime.DaysInMonth(2011, 2); Вполне может быть реализован так же)
      Ответить
      • public static int DaysInMonth(int year, int month)
        {
        if ((month < 1) || (month > 12))
        {
        throw new ArgumentOutOfRangeException("month", Environment.GetResourceString("ArgumentO utOfRange_Month"));
        }
        int[] numArray = IsLeapYear(year) ? DaysToMonth366 : DaysToMonth365;
        return (numArray[month] - numArray[month - 1]);
        }

        где

        DaysToMonth365 = new int[] { 0, 0x1f, 0x3b, 90, 120, 0x97, 0xb5, 0xd4, 0xf3, 0x111, 0x130, 0x14e, 0x16d };
        DaysToMonth366 = new int[] { 0, 0x1f, 60, 0x5b, 0x79, 0x98, 0xb6, 0xd5, 0xf4, 0x112, 0x131, 0x14f, 0x16e };
        Ответить
        • Математическое ожидание = 30,436869 дней в месяце
          Ответить
        • кал какой-то.
          надо бы отдельным говнокодом.
          Ответить
          • кагбэ это код из System.DateTime)))
            Ответить
            • реверснули mscorlib.dll ?
              Ответить
            • мда...
              я тут сырцы жабы как-то постил. а выходит у МS все гораздо хуже.
              просто этого никому кроме любознательных не видно..
              Ответить
              • Согласен код говно, но интересный.
                Не кал начинающего говнокодера, а качественное профессиональное говно.
                Ответить
          • Чем плох?
            Ответить
            • Хотя бы скачками hex-dec в массивах
              Ответить
              • Так я и думал. Hex/dec на совести рефлектора. Кратные 10 он изволил дать в десятичной записи, остальные представил в шестнадцатеричной. То же относительно лишних скобочек.

                Ещё претензии есть?
                Ответить
                • В данном контексте можно было и без вычисления разницы обойтись.
                  Ответить
                  • Зачем, если уже есть DaysToMonth365/DaysToMonth366, необходимый для других целей (например, вычисления разницы дат)?
                    Ответить
                    • Я же говорю "в данном контексте"
                      Ответить
                      • «Данный контекст» — класс для работы с датой/временем, DateTime.
                        Ответить
                        • Нет. Определение кол-ва дней в месяце.
                          Ответить
                          • Может кто-нить объяснит зачем хранить в массиве месяцев 13! элементов
                            Ответить
                            • Вот зачем:
                              return (numArray[month] - numArray[month - 1]);

                              Для month=12 будет numArray[12]-numArray[11], а для month=1 будет numArray[1]-numArray[0]. Это издержки выбранной модели.
                              Ответить
    • мля...
      Ответить
    • Оптимизация говнокода
      private int GetMaxDayValue(int month, int year)
      {
      switch (month)
      {
      case 1:
      return 31;
      case 2:
      switch (year)
      {
      case 2008:
      return 29;
      case 2009:
      return 28;
      case 2010:
      return 28;
      case 2011:
      return 28;
      case 2012:
      return 29;
      case 2013:
      return 28;
      case 2014:
      return 28;
      case 2015:
      return 28;
      case 2016:
      return 29;
      }
      case 3:
      return 31;
      case 4:
      return 30;
      case 5:
      return 31;
      case 6:
      return 30;
      case 7:
      return 31;
      case 8:
      return 31;
      case 9:
      return 30;
      case 10:
      return 31;
      case 11:
      return 30;
      case 12:
      return 31;
      }
      }
      Ответить

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