001    /*
002     * Zmanim Java API
003     * Copyright (C) 2004-2011 Eliyahu Hershfeld
004     *
005     * This program is free software; you can redistribute it and/or modify it under the terms of the
006     * GNU General Public License as published by the Free Software Foundation; either version 2 of the
007     * License, or (at your option) any later version.
008     *
009     * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
010     * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011     * General Public License for more details.
012     *
013     * You should have received a copy of the GNU General Public License along with this program; if
014     * not, write to the Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA
015     * 02111-1307, USA or connect to: http://www.fsf.org/copyleft/gpl.html
016     */
017    package net.sourceforge.zmanim.util;
018    
019    /**
020     * A class that represents a numeric time. Times that represent a time of day
021     * are stored as {@link java.util.Date}s in this API. The time class is used to
022     * represent numeric time such as the time in hours, minutes, seconds and
023     * milliseconds of a
024     * {@link net.sourceforge.zmanim.AstronomicalCalendar#getTemporalHour() temporal hour}.
025     *
026     * @author © Eliyahu Hershfeld 2004 - 2011
027     * @version 0.9.0
028     */
029    public class Time {
030            private static final int SECOND_MILLIS = 1000;
031    
032            private static final int MINUTE_MILLIS = SECOND_MILLIS * 60;
033    
034            private static final int HOUR_MILLIS = MINUTE_MILLIS * 60;
035    
036            private int hours = 0;
037    
038            private int minutes = 0;
039    
040            private int seconds = 0;
041    
042            private int milliseconds = 0;
043    
044            private boolean isNegative = false;
045    
046            public Time(int hours, int minutes, int seconds, int milliseconds) {
047                    this.hours = hours;
048                    this.minutes = minutes;
049                    this.seconds = seconds;
050                    this.milliseconds = milliseconds;
051            }
052    
053            public Time(double millis) {
054                    this((int) millis);
055            }
056    
057            public Time(int millis) {
058                    int adjustedMillis = millis;
059                    if(adjustedMillis < 0){
060                            this.isNegative = true;
061                            adjustedMillis = Math.abs(adjustedMillis);
062                    }
063                    this.hours = adjustedMillis / HOUR_MILLIS;
064                    adjustedMillis = adjustedMillis - this.hours * HOUR_MILLIS;
065    
066                    this.minutes = adjustedMillis / MINUTE_MILLIS;
067                    adjustedMillis = adjustedMillis - this.minutes * MINUTE_MILLIS;
068    
069                    this.seconds = adjustedMillis / SECOND_MILLIS;
070                    adjustedMillis = adjustedMillis - this.seconds * SECOND_MILLIS;
071    
072                    this.milliseconds = adjustedMillis;
073            }
074    
075            public boolean isNegative(){
076                    return this.isNegative;
077            }
078            public void setIsNegative(boolean isNegative){
079                    this.isNegative = isNegative;
080            }
081    
082            /**
083             * @return Returns the hour.
084             */
085            public int getHours() {
086                    return this.hours;
087            }
088    
089            /**
090             * @param hours
091             *            The hours to set.
092             */
093            public void setHours(int hours) {
094                    this.hours = hours;
095            }
096    
097            /**
098             * @return Returns the minutes.
099             */
100            public int getMinutes() {
101                    return this.minutes;
102            }
103    
104            /**
105             * @param minutes
106             *            The minutes to set.
107             */
108            public void setMinutes(int minutes) {
109                    this.minutes = minutes;
110            }
111    
112            /**
113             * @return Returns the seconds.
114             */
115            public int getSeconds() {
116                    return this.seconds;
117            }
118    
119            /**
120             * @param seconds
121             *            The seconds to set.
122             */
123            public void setSeconds(int seconds) {
124                    this.seconds = seconds;
125            }
126    
127            /**
128             * @return Returns the milliseconds.
129             */
130            public int getMilliseconds() {
131                    return this.milliseconds;
132            }
133    
134            /**
135             * @param milliseconds
136             *            The milliseconds to set.
137             */
138            public void setMilliseconds(int milliseconds) {
139                    this.milliseconds = milliseconds;
140            }
141    
142            public double getTime() {
143                    return this.hours * HOUR_MILLIS + this.minutes * MINUTE_MILLIS + this.seconds
144                                    * SECOND_MILLIS + this.milliseconds;
145            }
146    
147            public String toString() {
148                    return new ZmanimFormatter().format(this);
149            }
150    }