org.das2.datum
Class TimeUtil

java.lang.Object
  extended by org.das2.datum.TimeUtil

public final class TimeUtil
extends java.lang.Object

Various time utilities


Nested Class Summary
static class TimeUtil.TimeDigit
           
 class TimeUtil.TimeParser
           
static class TimeUtil.TimeStruct
           
 
Field Summary
static int DAY
           
static int HALF_YEAR
           
static int HOUR
           
static int MICRO
           
static int MILLI
           
static int MINUTE
           
static int MONTH
           
static int NANO
           
static int QUARTER
           
static int SECOND
           
static TimeUtil.TimeDigit TD_DAY
           
static TimeUtil.TimeDigit TD_HOUR
           
static TimeUtil.TimeDigit TD_MICRO
           
static TimeUtil.TimeDigit TD_MILLI
           
static TimeUtil.TimeDigit TD_MINUTE
           
static TimeUtil.TimeDigit TD_MONTH
           
static TimeUtil.TimeDigit TD_NANO
           
static TimeUtil.TimeDigit TD_SECOND
           
static TimeUtil.TimeDigit TD_YEAR
           
static int WEEK
           
static int YEAR
           
 
Method Summary
static TimeUtil.TimeStruct borrow(TimeUtil.TimeStruct t)
          Normalize the TimeStruct by decrementing higher digits.
static TimeUtil.TimeStruct carry(TimeUtil.TimeStruct t)
          Normalize the TimeStruct by incrementing higher digits.
static double convert(int year, int month, int day, int hour, int minute, double second, TimeLocationUnits units)
           
static Datum create(java.lang.String s)
          Creates a datum from a string
static Datum createTimeDatum(int year, int month, int day, int hour, int minute, int second, int nano)
          creates a Datum representing the time given in integer years, months, ..., seconds, nanoseconds.
static Datum createValid(java.lang.String validString)
          creates a Datum from a string which is known to contain a valid time format.
static int dayOfYear(int month, int day, int year)
           
static int daysInMonth(int month, int year)
           
static int getJulianDay(Datum datum)
          return the the integer number of days that have elapsed since roughly Monday, January 1, 4713 BC.
static double getMicroSecondsSinceMidnight(Datum datum)
           
static double getSecondsSinceMidnight(Datum datum)
           
static boolean isLeapYear(int year)
           
static boolean isValidTime(java.lang.String string)
           
static int julday(int month, int day, int year)
           
static TimeUtil.TimeStruct julianToGregorian(int julian)
          Break the Julian day apart into month, day year.
static void main(java.lang.String[] args)
           
static java.lang.String monthNameAbbrev(int mon)
          returns "Jan", "Feb", ...
static int monthNumber(java.lang.String s)
          returns 1..12 for the English month name
static Datum next(int step, Datum datum)
           
static Datum next(TimeUtil.TimeDigit td, int count, Datum datum)
           
static Datum nextMidnight(Datum datum)
           
static Datum nextMonth(Datum datum)
           
static TimeUtil.TimeStruct normalize(TimeUtil.TimeStruct t)
          convert times like "2000-01-01T24:00" to "2000-01-02T00:00" and "2000-002T00:00" to "2000-01-02T00:00".
static Datum now()
           
static TimeUtil.TimeStruct parseTime(java.lang.String s)
           
static Datum prev(int step, Datum datum)
          step down the previous ordinal.
static Datum prevMidnight(Datum datum)
           
static Datum toDatum(int[] timeArray)
           
static Datum toDatum(TimeUtil.TimeStruct d)
           
static int[] toTimeArray(Datum time)
          returns int[] { year, month, day, hour, minute, second, millis, micros }
static TimeUtil.TimeStruct toTimeStruct(Datum datum)
          splits the time location datum into y,m,d,etc components.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

YEAR

public static final int YEAR
See Also:
Constant Field Values

MONTH

public static final int MONTH
See Also:
Constant Field Values

DAY

public static final int DAY
See Also:
Constant Field Values

HOUR

public static final int HOUR
See Also:
Constant Field Values

MINUTE

public static final int MINUTE
See Also:
Constant Field Values

SECOND

public static final int SECOND
See Also:
Constant Field Values

MILLI

public static final int MILLI
See Also:
Constant Field Values

MICRO

public static final int MICRO
See Also:
Constant Field Values

NANO

public static final int NANO
See Also:
Constant Field Values

WEEK

public static final int WEEK
See Also:
Constant Field Values

QUARTER

public static final int QUARTER
See Also:
Constant Field Values

HALF_YEAR

public static final int HALF_YEAR
See Also:
Constant Field Values

TD_YEAR

public static final TimeUtil.TimeDigit TD_YEAR

TD_MONTH

public static final TimeUtil.TimeDigit TD_MONTH

TD_DAY

public static final TimeUtil.TimeDigit TD_DAY

TD_HOUR

public static final TimeUtil.TimeDigit TD_HOUR

TD_MINUTE

public static final TimeUtil.TimeDigit TD_MINUTE

TD_SECOND

public static final TimeUtil.TimeDigit TD_SECOND

TD_MILLI

public static final TimeUtil.TimeDigit TD_MILLI

TD_MICRO

public static final TimeUtil.TimeDigit TD_MICRO

TD_NANO

public static final TimeUtil.TimeDigit TD_NANO
Method Detail

daysInMonth

public static int daysInMonth(int month,
                              int year)

julday

public static int julday(int month,
                         int day,
                         int year)

dayOfYear

public static int dayOfYear(int month,
                            int day,
                            int year)

getSecondsSinceMidnight

public static double getSecondsSinceMidnight(Datum datum)

getMicroSecondsSinceMidnight

public static double getMicroSecondsSinceMidnight(Datum datum)

getJulianDay

public static int getJulianDay(Datum datum)
return the the integer number of days that have elapsed since roughly Monday, January 1, 4713 BC. Julian Day is defined as starting at noon UT, here is is defined starting at midnight.

Parameters:
datum -
Returns:

toDatum

public static Datum toDatum(TimeUtil.TimeStruct d)

julianToGregorian

public static TimeUtil.TimeStruct julianToGregorian(int julian)
Break the Julian day apart into month, day year. This is based on http://en.wikipedia.org/wiki/Julian_day (GNU Public License), and was introduced when toTimeStruct failed when the year was 1886.

Parameters:
julian - the (integer) number of days that have elapsed since the initial epoch at noon Universal Time (UT) Monday, January 1, 4713 BC
Returns:
a TimeStruct with the month, day and year fields set.

toTimeStruct

public static TimeUtil.TimeStruct toTimeStruct(Datum datum)
splits the time location datum into y,m,d,etc components. Note that seconds is a double, and micros will be 0.

Parameters:
datum - with time location units.
Returns:
TimeStruct containing the time components.

toTimeArray

public static int[] toTimeArray(Datum time)
returns int[] { year, month, day, hour, minute, second, millis, micros }


toDatum

public static Datum toDatum(int[] timeArray)

isLeapYear

public static boolean isLeapYear(int year)

carry

public static TimeUtil.TimeStruct carry(TimeUtil.TimeStruct t)
Normalize the TimeStruct by incrementing higher digits. For example, 2002-01-01T24:00 --> 2002-01-02T00:00.


borrow

public static TimeUtil.TimeStruct borrow(TimeUtil.TimeStruct t)
Normalize the TimeStruct by decrementing higher digits.

Throws:
java.lang.IllegalArgumentException - if t.day<0 or t.month<1

normalize

public static TimeUtil.TimeStruct normalize(TimeUtil.TimeStruct t)
convert times like "2000-01-01T24:00" to "2000-01-02T00:00" and "2000-002T00:00" to "2000-01-02T00:00".

Parameters:
t -
Returns:

next

public static Datum next(TimeUtil.TimeDigit td,
                         int count,
                         Datum datum)

next

public static final Datum next(int step,
                               Datum datum)

nextMonth

public static Datum nextMonth(Datum datum)

prev

public static Datum prev(int step,
                         Datum datum)
step down the previous ordinal. If the datum is already at an ordinal boundry, then step down by one ordinal.

Parameters:
step -
datum -
Returns:

now

public static Datum now()

convert

public static double convert(int year,
                             int month,
                             int day,
                             int hour,
                             int minute,
                             double second,
                             TimeLocationUnits units)
Parameters:
year - the year
month - the month
day - the day of month, unless month==0, then day is day of year.
hour - additional hours
minute - additional minutes
second - additional seconds
units - the Units in which to return the result.
Returns:
a double in the context of units.

monthNumber

public static int monthNumber(java.lang.String s)
                       throws java.text.ParseException
returns 1..12 for the English month name

Throws:
java.text.ParseException - if the name isn't recognized

monthNameAbbrev

public static java.lang.String monthNameAbbrev(int mon)
returns "Jan", "Feb", ... for month number (1..12).

Parameters:
mon - integer from 1 to 12.
Returns:
three character English month name.

parseTime

public static final TimeUtil.TimeStruct parseTime(java.lang.String s)
                                           throws java.text.ParseException
Throws:
java.text.ParseException

create

public static Datum create(java.lang.String s)
                    throws java.text.ParseException
Creates a datum from a string

Parameters:
s -
Returns:
Throws:
java.text.ParseException

createValid

public static Datum createValid(java.lang.String validString)
creates a Datum from a string which is known to contain a valid time format. Throws a RuntimeException if the string is not valid.

Parameters:
validString -
Returns:

isValidTime

public static boolean isValidTime(java.lang.String string)

main

public static void main(java.lang.String[] args)
                 throws java.lang.Exception
Throws:
java.lang.Exception

prevMidnight

public static Datum prevMidnight(Datum datum)

nextMidnight

public static Datum nextMidnight(Datum datum)

createTimeDatum

public static Datum createTimeDatum(int year,
                                    int month,
                                    int day,
                                    int hour,
                                    int minute,
                                    int second,
                                    int nano)
creates a Datum representing the time given in integer years, months, ..., seconds, nanoseconds. The year must be at least 1960, and must be a four-digit year. A double in Units.us2000 is used to represent the Datum, so resolution will drop as the year drops away from 2000.

Parameters:
year - four digit year >= 1960.
month - integer month, 1..12.
day - integer day of month.
hour - additional hours
minute - additional minutes
second - additional seconds
nano - additional nanoseconds
Returns:
a Datum with units Units.us2000.