Time.java 4.88 KiB
package pikelake.environment;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import pikelake.pikes.Pike;
import pikelake.pikes.PikesGroup;
import fr.cemagref.simaqualife.kernel.processes.AquaNismsGroupProcess;
public class Time extends AquaNismsGroupProcess<Pike,PikesGroup> {
		public static long yearOfBegin = 2012 ;
		protected final static Time simulationTimeInstance = new Time();
		public static enum PhaseJour {AUBE, JOUR, CREP, NUIT};
		public static enum Season {PRINTEMPS, ETE, AUTOMNE, HIVER};
		public static enum Mois {JANVIER, FEVRIER, MARS, AVRIL, MAI, JUIN, JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE};
		public static int mois = 0, jour = 0, jourMois = 1, saison = 0, annee = 0, phaseJour = 0, heure = 0;
		@Override
		public void doProcess (PikesGroup group) {
			long nbrIter = group.getPilot().getCurrentTime();
			// Pas de temps Horaire
			heure = (int) nbrIter % 24;	
			jour = (int) Math.ceil(nbrIter / 24.);
			if (jour>365) {
				annee = annee + 1;
				jour = jour - 365;
			// Calcul du mois
			if		(jour <= 31)	mois = 0; // Janv
			else if (jour <= 59)	mois = 1; // Fev
			else if (jour <= 90)	mois = 2; // Mars
			else if (jour <= 120)	mois = 3;// Avril
			else if (jour <= 151)	mois = 4; // Mai
			else if (jour <= 181)	mois = 5; // Juin
			else if (jour <= 212)	mois = 6; // Juillet
			else if (jour <= 243)	mois = 7; // Aout
			else if (jour <= 273)	mois = 8; // Sept
			else if (jour <= 304)	mois = 9; // Oct
			else if (jour <= 334)	mois = 10; // Nov
			else if (jour <= 365)	mois = 11; // Dec
			else					mois = 0;
			calculSaison();
			calculPhaseJour();
			if (heure == 0)
				jourMois = jourMois + 1;
			// RAZ jourMois
			if ((mois == 0 | mois == 2 | mois == 4 | mois == 6 | mois == 7 | mois == 9 | mois == 11) & jourMois == 32)	jourMois = 1;
			else if ((mois == 3 | mois == 5 | mois == 8 | mois == 10) & jourMois == 31)									jourMois = 1;
			else if (mois == 1 & jourMois == 29)																		jourMois = 1;
			//System.out.println(yearOfBegin + "	" + Season.values()[saison] + "	" + Mois.values()[mois] + "	" + jour + "	" + jourMois + "	" + heure + "	" + PhaseJour.values()[phaseJour]);
		public void calculSaison () {		
			if 		(mois == 2 & jour >= 20)	saison = 0;
			else if (mois == 5 & jour >= 20)	saison = 1;
			else if (mois == 8 & jour >= 22)	saison = 2;
			else if (mois == 11 & jour >= 21)	saison = 3;
		public void calculPhaseJour () {
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
String temp[] = null, dateCompleteLever[] = null, dateCompleteCoucher[] = null; int jourLever = 0, moisLever = 0, heureLever = 0, heureCoucher = 0; @SuppressWarnings("unused") int minLever = 0, minCoucher = 0; // Lecture fichier contenant les hoiraires de lever et de coucher du soleil String filePath = "data/input/leshorairesdusoleil.csv"; Scanner scanner; try { scanner = new Scanner(new File(filePath)); // On boucle sur chaque ligne detecte String line = scanner.nextLine(); while (scanner.hasNextLine()) { line = scanner.nextLine(); temp = line.split(";"); // Dtermination heure de lever du soleil dateCompleteLever = temp[0].split("[/: ]+"); dateCompleteCoucher = temp[1].split("[/: ]+"); // Calcul date jourLever = Integer.parseInt(dateCompleteLever[0]); moisLever = Integer.parseInt(dateCompleteLever[1]); // Lever du soleil heureLever = Integer.parseInt(dateCompleteLever[3]); minLever = Integer.parseInt(dateCompleteLever[4]); // Coucher du soleil heureCoucher = Integer.parseInt(dateCompleteCoucher[3]); minCoucher = Integer.parseInt(dateCompleteCoucher[4]); // Calcul de la phase de la journee if (jourMois == jourLever & mois == (moisLever-1)) { if (heure > heureLever-2 & heure < heureLever+2) phaseJour = 0; else if (heure > heureLever+1 & heure < heureCoucher-1) phaseJour = 1; else if (heure > heureCoucher-2 & heure < heureCoucher+2) phaseJour = 2; else phaseJour = 3; break; } } scanner.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static String getPhaseJour () { return PhaseJour.values()[phaseJour].toString(); } public static String getMois () { return Mois.values()[mois].toString(); } public static String getSeason(){ return Season.values()[saison].toString(); } /*public static long getYear(){ return yearOfBegin; } public static long getNbYearFromBegin(long time){ return (long) Math.floor(time / Season.values().length); } public static double getSeasonDuration(){ return 1./ Season.values().length; } public static Time getInstance(){
141142143144
return simulationTimeInstance; }*/ }