Чистый код. Создание, анализ и рефакторинг — страница 69 из 94

104     public static final int MINIMUM_YEAR_SUPPORTED = 1900;

105

106     /** Наибольшее значение года, поддерживаемое форматом даты. */

107     public static final int MAXIMUM_YEAR_SUPPORTED = 9999;

108

109     /** Константа для понедельника, эквивалент java.util.Calendar.MONDAY. */

110     public static final int MONDAY = Calendar.MONDAY;

111

112     /**

113      * Константа для вторника, эквивалент java.util.Calendar.TUESDAY.

114      */

115     public static final int TUESDAY = Calendar.TUESDAY;

116

117     /**

118      * Константа для среды, эквивалент

119      * java.util.Calendar.WEDNESDAY.

120      */

121     public static final int WEDNESDAY = Calendar.WEDNESDAY;

122

123     /**

124      * Константа для четверга, эквивалент java.util.Calendar.THURSDAY.

125      */

126     public static final int THURSDAY = Calendar.THURSDAY;

127

128     /** Константа для пятницы, эквивалент java.util.Calendar.FRIDAY. */

129     public static final int FRIDAY = Calendar.FRIDAY;

130

131     /**

132      * Константа для субботы, эквивалент java.util.Calendar.SATURDAY.

133      */

134     public static final int SATURDAY = Calendar.SATURDAY;

135

136     /** Константа для воскресенья, эквивалент java.util.Calendar.SUNDAY. */

137     public static final int SUNDAY = Calendar.SUNDAY;

138

139     /** Количество дней в месяцах невисокосного года. */

140     static final int[] LAST_DAY_OF_MONTH =

141         {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

142

143     /** Количество дней от начала года до конца месяца в невисокосном годе. */

144     static final int[] AGGREGATE_DAYS_TO_END_OF_MONTH =

145         {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};

146

147     /** Количество дней до конца предыдущего месяца. */

148     static final int[] AGGREGATE_DAYS_TO_END_OF_PRECEDING_MONTH =

149         {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};

150

151     /** Количество дней от начала года до конца месяца в високосном годе. */

152     static final int[] LEAP_YEAR_AGGREGATE_DAYS_TO_END_OF_MONTH =

153         {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};

154

155     /**

156      * Количество дней до конца предыдущего месяца в високосном годе.

157      */

158     static final int[]

159         LEAP_YEAR_AGGREGATE_DAYS_TO_END_OF_PRECEDING_MONTH =

160             {0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};

161

162     /** Константа для обозначения первой недели месяца. */

163     public static final int FIRST_WEEK_IN_MONTH = 1;

164

165     /** Константа для обозначения второй недели месяца. */

166     public static final int SECOND_WEEK_IN_MONTH = 2;

167

168     /** Константа для обозначения третьей недели месяца. */

169     public static final int THIRD_WEEK_IN_MONTH = 3;

170

171     /** Константа для обозначения четвертой недели месяца. */

172     public static final int FOURTH_WEEK_IN_MONTH = 4;

173

174     /** Константа для обозначения последней недели месяца. */

175     public static final int LAST_WEEK_IN_MONTH = 0;

176

177     /** Константа для обозначения типа диапазона. */

178     public static final int INCLUDE_NONE = 0;

179

180     /** Константа для обозначения типа диапазона. */

181     public static final int INCLUDE_FIRST = 1;

182

183     /** Константа для обозначения типа диапазона. */

184     public static final int INCLUDE_SECOND = 2;

185

186     /** Константа для обозначения типа диапазона. */


Листинг Б.1 (продолжение)

187     public static final int INCLUDE_BOTH = 3;

188

189     /**

190      * Useful constant for specifying a day of the week relative to a fixed

191      * date.

192      */

193     public static final int PRECEDING = -1;

194

195     /**

196      * Константа для определения дня недели относительно

197      * фиксированной даты.

198      */

199     public static final int NEAREST = 0;

200

201     /**

202      * Константа для определения дня недели относительно

203      * фиксированной даты.

204      */

205     public static final int FOLLOWING = 1;

206

207     /** Описание даты. */

208     private String description;

209

210     /**

211      * Конструктор по умолчанию.

212      */

213     protected SerialDate() {

214     }

215

216     /**

217      * Возвращает true, если целое число code соответствует

218      * действительному дню недели, или false в противном случае.

219      *

220      * @param code  код, проверяемый на допустимость.

221      *

222      * @return true, если целое число code соответствует

223      *  действительному дню недели, false в противном случае.

224      */

225     public static boolean isValidWeekdayCode(final int code) {

226

227         switch(code) {

228             case SUNDAY:

229             case MONDAY:

230             case TUESDAY:

231             case WEDNESDAY:

232             case THURSDAY:

233             case FRIDAY:

234             case SATURDAY: