@Override public void run() { // thread content // TODO Auto-generated method stub if (timerfirst) { // lock by the first thread executing it timerfirst = false; while (true) { while (!computerClock) { // switch between program clock and computer clock try { Thread.currentThread().sleep(1000); // sleep every second } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // second++; //increase the timer by a second // if (second == 60) //increase the minute and hour and day // { // second = 0; // minute++; // } // if (minute ==60){ // minute = 0; // hour++; // } // if (hour ==24){ // hour = 0; // day++; // weekday = (weekday+1) % weekdays.length; // parent.UpdateCal(); //redraw the view // } // if ((day == 29) && (month == 2)){ //2 means February, check leap year // if (year % 4 != 0 || (year % 100)== 0 && (year % 400) != 0){ // e.g. 1700 is not a // leap year // day = 1; // month++; // } // // // } // if ((day == 30) && (month ==2)){ //handling of leap year // day = 1; // month++; // } // if (((month == 1) || (month == 3)|| (month == 5)|| (month == 7)|| (month == 8) // ||(month == 10) || (month == 12)) && (day== 32)){ //handling of months with 31 days // day = 1; // month++; // } // if (((month == 4) || (month == 6)|| (month == 9)|| (month == 11)) && (day== 31)){ // //handling of months with 30 days // day =1; // month++; // } // if (month==13){ //switch to a new year // month =1; // year++; // } currentTime.setTime(currentTime.getTime() + 1000); year = currentTime.getYear() + 1900; month = currentTime.getMonth() + 1; day = currentTime.getDate(); hour = currentTime.getHours(); minute = currentTime.getMinutes(); second = currentTime.getSeconds(); weekday = currentTime.getDay(); // outputTheCurrentTime(); } while (computerClock) { try { // obtain the computer time every second Thread.currentThread().sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Calendar cal = Calendar.getInstance(); day = cal.get(Calendar.DATE); month = cal.get(Calendar.MONTH) + 1; year = cal.get(Calendar.YEAR); hour = cal.get(Calendar.HOUR_OF_DAY); minute = cal.get(Calendar.MINUTE); second = cal.get(Calendar.SECOND); weekday = cal.get(Calendar.DAY_OF_WEEK) - 1; } } } else { // Thread 2 is responsible for providing an user interface for accessing the timer int option = -1; while (option != 0) { System.out.println("1) Output the current time"); // System.out.println("2) Modify the time"); System.out.println("2) Switch mode (Program clock <-> Computer Clock)"); System.out.println("0) Quit"); System.out.print("Please choose an option: "); Scanner scanner = new Scanner(System.in); option = Integer.parseInt(scanner.next()); if (option == 1) { outputTheCurrentTime(); } // if (option == 2){ // System.out.println("Please input the year, month(in integer), day, hour, minute // and second separated by a space: "); // year = Integer.parseInt(scanner.next()); // month = Integer.parseInt(scanner.next()); // day = Integer.parseInt(scanner.next()); // hour = Integer.parseInt(scanner.next()); // minute = Integer.parseInt(scanner.next()); // second = Integer.parseInt(scanner.next()); // // // //Sun = 0, Mon = 1, Tue = 2, Wed = 3, Thurs = 4. Fri = 5, Sat = 6 // java.util.GregorianCalendar cal = (GregorianCalendar) Calendar.getInstance(); // //set the weekday of the input date // cal.setTime(new Timestamp(year-1900, month-1, day, hour, minute, second, 0)); // // weekday = cal.get(java.util.Calendar.DAY_OF_WEEK)-1; // // // if (parent != null) // parent.UpdateCal(); //redraw the view // System.out.println(); // } if (option == 3) { // switch between program timer and computer clock if (!computerClock) { computerClock = true; System.out.println("Computer Clock is in effective."); } else { computerClock = false; System.out.println("Program Clock is in effective."); } System.out.println(); } } } }
/** * @param in Timestamp to convert * @return Day in year */ public static int execute(Timestamp ts) { return execute(ts.getYear() + 1900, ts.getMonth() + 1, ts.getDate()); }