/**
 *
 * Eksempel - bruk av den nye dato-klassen i Java 8
 *
 * Som eksempel brukes testklienten fra løsningen til oppgave 11-4 side 387 i boka.
 * Den nye klassen tilbyr all funksjonaliteten (og mye mer til) som skulle programmeres i denne oppgaven.
 *
 */

 import java.time.*;
 public class Oppgave11_4_Java8_1 {
  public static void main(String[] args) throws java.text.ParseException {
    java.time.LocalDate dato1 = java.time.LocalDate.now();  // dagens dato
    java.time.LocalTime tid = java.time.LocalTime.now();  // klokkeslettet
    String resultat = "Dagens dato er: " + dato1.toString() +
                             "\nÅret er: " + dato1.getYear() +
                             ", måneden er: " + dato1.getMonthValue() +
                             ", dagen er: " + dato1.getDayOfMonth() +
                             "\nEksakt tidspunkt: " + tid.toString();
     System.out.println("Sjekk opplysningene om dagens dato:\n" + resultat);

     System.out.println("\nTotalt antall tester: 4");
     dato1 = java.time.LocalDate.of(2000, Month.OCTOBER, 22);
	 if (dato1.equals(java.time.LocalDate.of(2000, Month.OCTOBER, 22))) {
       System.out.println("Dato: Test 1 vellykket");
     }

    java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("ddMMyyyy");
    /*
     * Lager en ny dato som er 0-4 dager fram i tiden, og sammenlikner de to datoene.
     */
    resultat = "";
    for (int antDager = 0; antDager <= 4; antDager++) {
      java.time.LocalDate dato2 = dato1.plusDays(antDager);
      int forhold = dato1.compareTo(dato2);
      if (forhold < 0) {
        resultat += ("\n" + dato1.format(formatter) + " er før " + dato2.format(formatter));
      } else if (forhold == 0) {
        resultat += ("\n" + dato1.format(formatter) + " er lik " + dato2.format(formatter));
      } else {
        resultat += ("\n" + dato1.format(formatter) + " er etter " + dato2.format(formatter));
      }
      /* Finner antall dager mellom de to datoene */
      long dgForskjell = dato1.until(dato2, java.time.temporal.ChronoUnit.DAYS);
      resultat += ("\nFra " + dato1.format(formatter) + " til " + dato2.format(formatter) + " er det " + dgForskjell + " dager.");
    }
    System.out.println(resultat);
    if (resultat.equals("\n22102000 er lik 22102000"
                            + "\nFra 22102000 til 22102000 er det 0 dager."
                            + "\n22102000 er før 23102000"
                            + "\nFra 22102000 til 23102000 er det 1 dager."
                            + "\n22102000 er før 24102000"
                            + "\nFra 22102000 til 24102000 er det 2 dager."
                            + "\n22102000 er før 25102000"
                            + "\nFra 22102000 til 25102000 er det 3 dager."
                            + "\n22102000 er før 26102000"
                            + "\nFra 22102000 til 26102000 er det 4 dager.")) {
      System.out.println("Dato: Test 2 vellykket");
    }
    /*
     * Samme som foregående test, men krysser grensen mellom to år.
     */
    dato1 = java.time.LocalDate.of(2007, Month.DECEMBER, 30);
    resultat = "";
    for (int antDager = 0; antDager <= 4; antDager++) {
      java.time.LocalDate dato2 = dato1.plusDays(antDager);
      int forhold = dato1.compareTo(dato2);
      if (forhold < 0) {
        resultat += ("\n" + dato1.format(formatter) + " er før " + dato2.format(formatter));
      } else if (forhold == 0) {
        resultat += ("\n" + dato1.format(formatter) + " er lik " + dato2.format(formatter));
      } else {
        resultat += ("\n" + dato1.format(formatter) + " er etter " + dato2.format(formatter));
      }
      /* Finner antall dager mellom de to datoene */
      long dgForskjell = dato1.until(dato2, java.time.temporal.ChronoUnit.DAYS);
      resultat += ("\nFra " + dato1.format(formatter) + " til " + dato2.format(formatter) + " er det " + dgForskjell + " dager.");
    }
    if (resultat.equals("\n30122007 er lik 30122007"
                            + "\nFra 30122007 til 30122007 er det 0 dager."
                            + "\n30122007 er før 31122007"
                            + "\nFra 30122007 til 31122007 er det 1 dager."
                            + "\n30122007 er før 01012008"
                            + "\nFra 30122007 til 01012008 er det 2 dager."
                            + "\n30122007 er før 02012008"
                            + "\nFra 30122007 til 02012008 er det 3 dager."
                            + "\n30122007 er før 03012008"
                            + "\nFra 30122007 til 03012008 er det 4 dager.")) {
      System.out.println("Dato: Test 3 vellykket");
    }

    /*
     * Lager to datoer og finner antall år mellom de to.
     */
    java.time.LocalDate dato3 = java.time.LocalDate.of(1970, Month.OCTOBER, 22); //"22101970";
    java.time.LocalDate dato4 = dato3.plusDays(4);
    long antÅr = dato3.until(dato4, java.time.temporal.ChronoUnit.YEARS);
    resultat = ("\nFra " + dato3.format(formatter) + " til " + dato4.format(formatter) + " er det " + antÅr + " hele år.");

    dato4 = java.time.LocalDate.of(1980, Month.DECEMBER, 30);
    antÅr = dato3.until(dato4, java.time.temporal.ChronoUnit.YEARS);
    resultat += ("\nFra " + dato3.format(formatter) + " til " + dato4.format(formatter) + " er det " + antÅr + " hele år.");
    antÅr = dato4.until(dato3, java.time.temporal.ChronoUnit.YEARS);
    resultat += ("\nFra " + dato4.format(formatter) + " til " + dato3.format(formatter) + " er det " + antÅr + " hele år.");

    dato4 = java.time.LocalDate.of(1980, Month.JANUARY, 30); ;
    antÅr = dato3.until(dato4, java.time.temporal.ChronoUnit.YEARS);
    resultat += ("\nFra " + dato3.format(formatter) + " til " + dato4.format(formatter) + " er det " + antÅr + " hele år.");
    antÅr = dato4.until(dato3, java.time.temporal.ChronoUnit.YEARS);
    resultat += ("\nFra " + dato4.format(formatter) + " til " + dato3.format(formatter) + " er det " + antÅr + " hele år.");
    System.out.println(resultat);
    if (resultat.equals("\nFra 22101970 til 26101970 er det 0 hele år."
                            + "\nFra 22101970 til 30121980 er det 10 hele år."
                            + "\nFra 30121980 til 22101970 er det -10 hele år."
                            + "\nFra 22101970 til 30011980 er det 9 hele år."
                            + "\nFra 30011980 til 22101970 er det -9 hele år.")) {
      System.out.println("Dato: Test 4 vellykket");
    }
  }
}

/* Utskrift:
Sjekk opplysningene om dagens dato:
Dagens dato er: 2015-11-12
Året er: 2015, måneden er: 11, dagen er: 12
Eksakt tidspunkt: 15:04:49.571

Totalt antall tester: 4
Dato: Test 1 vellykket

22102000 er lik 22102000
Fra 22102000 til 22102000 er det 0 dager.
22102000 er før 23102000
Fra 22102000 til 23102000 er det 1 dager.
22102000 er før 24102000
Fra 22102000 til 24102000 er det 2 dager.
22102000 er før 25102000
Fra 22102000 til 25102000 er det 3 dager.
22102000 er før 26102000
Fra 22102000 til 26102000 er det 4 dager.
Dato: Test 2 vellykket
Dato: Test 3 vellykket

Fra 22101970 til 26101970 er det 0 hele år.
Fra 22101970 til 30121980 er det 10 hele år.
Fra 30121980 til 22101970 er det -10 hele år.
Fra 22101970 til 30011980 er det 9 hele år.
Fra 30011980 til 22101970 er det -9 hele år.
Dato: Test 4 vellykket
*/