1   package kalenteri;
2   
3   /**
4    * Pääosin demoista 2 ja 6 lainattu päivämäärän tarkistin.
5    * @author Timo Koski
6    * @version 11.4.2012
7    */
8   public class PvmTarkistus {
9   
10      /** Taulukko kuukausien pituuksista. Oma rivi  karkausvuosille */
11      public static final int KPITUUDET[][] = {
12          // 1  2  3  4  5  6  7  8  9 10 11 12
13          { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
14          { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
15      };
16  
17  
18      /**
19       * Palautetaan tieto siitä onko tutkittava vuosi karkausvuosi vai ei
20       * @param vv tutkittava vuosi
21       * @return 1 jos on karkausvuosi ja 0 jos ei ole
22       */
23      public static int karkausvuosi(int vv) {
24          if ( vv % 400 == 0 ) return 1;
25          if ( vv % 100 == 0 ) return 0;
26          if ( vv % 4 == 0 ) return 1;
27          return 0;
28      }
29  
30      /**
31       * Tarkastetaan onko syntaksi oikein.
32       * @param p
33       * @param k
34       * @param v
35       * @return onko päivämäärän syntaksi oikea.
36       */
37      public static boolean tarkistaPvm(int p, int k, int v) {
38          if ((v<1) || (v>2500))
39              return false;
40          if ((k>12) || (k<1))
41              return false;
42          int kv = karkausvuosi(v); //palauttaa 0 jos ei, 1 jos on
43          int pv_lkm = KPITUUDET[kv][k - 1];
44          if ((p > pv_lkm) || (p<1)) 
45              return false;
46          return true;
47      }
48  }
49