Чистый код. Создание, анализ и рефакторинг (Мартин) - страница 294

>147      * день с заданным номером (в диапазоне от 2 до 2958465).

>148      *

>149      * @param serial  порядковый номер дня (диапазон: от 2 до 2958465).

>150      */

>151     public SpreadsheetDate(final int serial) {

>152

>153         if ((serial >= SERIAL_LOWER_BOUND) && (serial <= SERIAL_UPPER_BOUND)) {

>154             this.serial = serial;

>155         }

>156         else {

>157             throw new IllegalArgumentException(

>158                 "SpreadsheetDate: Serial must be in range 2 to 2958465.");

>159         }

>160

>161         // День-месяц-год должен синхронизироваться с порядковым номером...

>162         calcDayMonthYear();

>163

>164     }

>165

>166     /**

>167      * Возвращает описание, присоединенное к дате.

>168      * Дата не обязана иметь описание, но в некоторых приложениях

>169      * оно может оказаться полезным.

>170      *

>171      * @return описание, присоединенное к дате.

>172      */

>173     public String getDescription() {

>174         return this.description;

>175     }

>176

>177     /**

>178      * Задает описание для даты.

>179      *

>180      * @param description  описание даты (разрешается

>181      *                     null).

>182      */

>183     public void setDescription(final String description) {

>184         this.description = description;

>185     }

>186


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

>187     /**

>188      * Возвращает порядковый номер даты, где 1 января 1900 = 2

>189      * (что почти соответствует системе нумерации, используемой в Microsoft

>190      * Excel for Windows и Lotus 1-2-3).

>191      *

>192      * @return порядковый номер даты.

>193      */

>194     public int toSerial() {

>195         return this.serial;

>196     }

>197

>198     /**

>199      * Возвращает объект java.util.Date, эквивалентный текущей дате.

>200      *

>201      * @return объект даты.

>202      */

>203     public Date toDate() {

>204         final Calendar calendar = Calendar.getInstance();

>205         calendar.set(getYYYY(), getMonth() - 1, getDayOfMonth(), 0, 0, 0);

>206         return calendar.getTime();

>207     }

>208

>209     /**

>210      * Возвращает год (из действительного диапазона от 1900 до 9999).

>211      *

>212      * @return год.

>213      */

>214     public int getYYYY() {

>215         return this.year;

>216     }

>217

>218     /**

>219      * Возвращает месяц (январь = 1, февраль = 2, март = 3).

>220      *

>221      * @return месяц года.

>222      */

>223     public int getMonth() {

>224         return this.month;

>225     }

>226

>227     /**

>228      * Возвращает день месяца.

>229      *

>230      * @return день месяца.

>231      */

>232     public int getDayOfMonth() {