Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package demo.d6;
- import fi.jyu.mit.ohj2.*;
- /**
- * Alustava luokka päivämäärää varten
- * @author Vesa Lappalainen
- * @version 1.0, 07.02.2003
- * @version 1.1, 14.02.2003
- * @version 1.2, 17.02.2003
- * @version 1.3, 11.02.2008
- */
- public class Pvm {
- private int pv;
- private int kk;
- private int vv;
- private static final int kk_pituudet[][] = {
- // 0 1 2 3 4 5 6 7 8 9 10 11 12
- { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
- { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
- };
- /**
- * Muuttaa päivämäärän nykypäivälle.
- * Todo: pitää vaihtaa hakemaan päivämäärä oikeasti.
- * Mutta perinnässäkään ei nyt saa käyttää enempää attribuutteja kuin tässä on
- */
- public static int karkausvuosi(int vv) {
- if ( vv % 400 == 0 ) return 1;
- if ( vv % 100 == 0 ) return 0;
- if ( vv % 4 == 0 ) return 1;
- return 0;
- }
- public void paivays() {
- pv = 0;
- kk = 0;
- vv = 0;
- }
- public static int compareTo(Pvm eka, Pvm toka) {
- int p = eka.getPv();
- int k = eka.getKk();
- int v = eka.getVv();
- int p2 = toka.getPv();
- int k2 = toka.getKk();
- int v2 = toka.getVv();
- if (v > v2) return 1;
- if (v == v2) {
- if (k > k2) return 1;
- else if(k == k2) {
- if (p > p2) {
- return 1;
- }
- else if (p == p2) {
- return 0;
- }
- }
- }
- return -1;
- }
- public int compareTo(Pvm eka) {
- int p = eka.getPv();
- int k = eka.getKk();
- int v = eka.getVv();
- if (v > vv) return 1;
- if (v == vv) {
- if (k > kk) return 1;
- else if(k == kk) {
- if (p > pv) {
- return 1;
- }
- else if (p == pv) {
- return 0;
- }
- }
- }
- return -1;
- }
- public boolean equals(Pvm eka) {
- int p = eka.getPv();
- int k = eka.getKk();
- int v = eka.getVv();
- if (v > vv) return false;
- if (v == vv) {
- if (k > kk) return false;
- else if(k == kk) {
- if (p > pv) {
- return false;
- }
- else if (p == pv) {
- return true;
- }
- }
- }
- return false;
- }
- /**
- * Alustetaan päivämäärä. 0-arvot eivät muuta vastaavaa attribuuttia
- * TODO: oikeellisuustarkistukset
- * @param ipv päivän alustus
- * @param ikk kuukauden alustus
- * @param ivv vuoden alustus
- */
- public void alusta(int ipv, int ikk, int ivv) {
- int kv = karkausvuosi(ivv);
- if (ikk>12) {
- return;
- }
- else {
- if (ipv > 0 && ipv <= kk_pituudet[kv][ikk]) this.pv = ipv;
- if (ikk == 2) {
- if(ipv>28 || ipv == 0) {
- return;
- }
- }
- if (ikk > 0 && ikk < 13 && (ipv == 0 || ipv > 0 && ipv <= kk_pituudet[kv][ikk])) {
- this.kk = ikk;
- }
- if ( ivv > 0 && (ikk == 0 || ikk > 0 && ikk < 13 && (ipv == 0 || ipv > 0 && ipv <= kk_pituudet[kv][ikk]))) this.vv = ivv;
- if ( this.vv < 50 ) this.vv += 2000;
- if ( this.vv < 100 ) this.vv += 1900;
- }
- }
- /** Alustetaan kaikki attribuutit oletusarvoon */
- public Pvm() {
- this(0, 0, 0);
- }
- /**
- * Alustetaan kuukausi ja vuosi oletusarvoon
- * @param pv päivän alustusarvo
- */
- public Pvm(int pv) {
- this(pv, 0, 0);
- }
- /**
- * Alustetaan vuosi oletusarvoon
- * @param pv päivän alustusarvo
- * @param kk kuukauden oletusarvo
- */
- public Pvm(int pv, int kk) {
- this(pv, kk, 0);
- }
- /**
- * Alustetaan vuosi oletusarvoon
- * @param pv päivän alustusarvo
- * @param kk kuukauden oletusarvo
- * @param vv vuoden alustusarvo
- */
- public Pvm(int pv, int kk, int vv) {
- paivays();
- alusta(pv, kk, vv);
- }
- /**
- * Alustetaan päivämäärä merkkijonosta
- * @param s muotoa 12.3.2008 oleva merkkijono
- */
- public Pvm(String s) {
- paivays();
- pvmParse(s);
- }
- @Override
- public String toString() {
- return pv + "." + kk + "." + vv;
- }
- /**
- * Ottaa päivämäärän tiedot merkkijonosta joka on muotoa 17.2.2007
- * Jos joku osa puuttuu, sille käytetään tämän päivän arvoa oletuksena.
- * @param sb tutkittava merkkijono
- */
- protected final void pvmParse(StringBuilder sb) {
- int p = this.pv;
- int k = this.kk;
- int v = this.vv;
- if(sb.toString().contains(".")) {
- p = Mjonot.erota(sb, '.', 0);
- k = Mjonot.erota(sb, '.', 0);
- v = Mjonot.erota(sb, ' ', 0);
- }
- else {
- p = Integer.parseInt(sb.toString());
- sb.delete(0, sb.length());
- }
- alusta(p, k, v);
- // tai alusta(Mjonot.erota(sb,'.',0),Mjonot.erota(sb,'.',0),Mjonot.erota(sb,'.',0));
- }
- protected final void pvmParse(String s) {
- pvmParse(new StringBuilder(s));
- }
- public void parse(String s) {
- pvmParse(s);
- }
- public void parse(StringBuilder sb) {
- pvmParse(sb);
- }
- public int getPv() {
- return pv;
- }
- public int getKk() {
- return kk;
- }
- /**
- * @example
- * <pre name="test">
- * Pvm pvm = new Pvm(20,2,2012);
- * pvm.alusta(1,3,0); pvm.toString() === "1.3.2012";
- * pvm.alusta(2,13,2012); pvm.toString() === "1.3.2012";
- * pvm.alusta(28,2,2012); pvm.toString() === "28.2.2012";
- * pvm.alusta(29,2,2011); pvm.toString() === "28.2.2012";
- * pvm.alusta(29,2,2012); pvm.toString() === "29.2.2012";
- * pvm.alusta(31,3,2012); pvm.toString() === "31.3.2012";
- * pvm.alusta(31,4,2012); pvm.toString() === "31.3.2012";
- * pvm.alusta( 0,2,2012); pvm.toString() === "31.3.2012";
- * </pre>
- * @example
- * <pre name="test">
- * Pvm pv1 = new Pvm(15,6,2013);
- * Pvm pv2 = new Pvm(14,5,2014);
- * Pvm pv3 = new Pvm(15,7,2014);
- * Pvm pv4 = new Pvm(16,7,2014);
- * Pvm pv5 = new Pvm(16,7,2014);
- * Pvm pv6 = new Pvm(16,7,2012);
- * Pvm.compareTo(pv1,pv2) === -1; // ero vuodessa
- * Pvm.compareTo(pv2,pv1) === 1;
- * Pvm.compareTo(pv2,pv3) === -1; // ero kuukaudessa
- * Pvm.compareTo(pv3,pv2) === 1;
- * Pvm.compareTo(pv3,pv4) === -1; // ero päivässä
- * Pvm.compareTo(pv4,pv3) === 1;
- * Pvm.compareTo(pv4,pv5) === 0; // kaikki samoja
- * Pvm.compareTo(pv6,pv2) === -1; // ero kuukaudessa, mutta vuodessa toisinpäin
- * Pvm.compareTo(pv2,pv6) === 1;
- * </pre>
- */
- public int getVv() {
- return vv;
- }
- /**
- * Testataan päivämäärä-luokkaa
- * @param args ei käytössä
- */
- public static void main(String[] args) {
- Pvm pvm = new Pvm();
- pvm.alusta(31,3,2012);
- System.out.println(pvm + " eka");
- pvm.alusta(0,2,2012);
- System.out.println(pvm + " toka");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement