org.das2.datum.TimeUtil

Various time utilities


YEAR


MONTH


DAY


HOUR


MINUTE


SECOND


MILLI


MICRO


NANO


WEEK


QUARTER


HALF_YEAR


TD_YEAR


TD_MONTH


TD_DAY


TD_HOUR


TD_MINUTE


TD_SECOND


TD_MILLI


TD_MICRO


TD_NANO


add

add( org.das2.datum.TimeUtil.TimeStruct a, org.das2.datum.TimeUtil.TimeStruct b ) → org.das2.datum.TimeUtil.TimeStruct

Parameters

a - a TimeUtil.TimeStruct
b - a TimeUtil.TimeStruct

Returns:

org.das2.datum.TimeUtil.TimeStruct

[search for examples] [view on GitHub] [view on old javadoc] [view source]


borrow

borrow( org.das2.datum.TimeUtil.TimeStruct t ) → org.das2.datum.TimeUtil.TimeStruct

Normalize the TimeStruct by decrementing higher digits.

Parameters

t - the time.

Returns:

the normalized TimeStruct

See Also:

normalize(org.das2.datum.TimeUtil.TimeStruct)


[search for examples] [view on GitHub] [view on old javadoc] [view source]


carry

carry( org.das2.datum.TimeUtil.TimeStruct t ) → org.das2.datum.TimeUtil.TimeStruct

Normalize the TimeStruct by incrementing higher digits. For example, 2002-01-01T24:00 → 2002-01-02T00:00. This will only carry one to the next higher place, so 70 seconds is handled but not 130. 2015-09-08: this now supports leap seconds.

Parameters

t - a time structure

Returns:

a time structure where extra minutes are moved into hours, etc.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


ceil

ceil( int step, Datum datum ) → Datum

return the next ordinal boundary if we aren't at one already.

Parameters

step - the ordinal location, such as TimeUtil.DAY or TimeUtil.HALF_YEAR
datum - the location.

Returns:

the next ordinal boundary if we aren't at one already.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


convert

convert( int year, int month, int day, int hour, int minute, double second, org.das2.datum.TimeLocationUnits units ) → double

convert the month components to a double in the given units.

Parameters

year - the year, which must be greater than 1582
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 given units.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


create

create( String s ) → Datum

Creates a datum from a string

Parameters

s - a String

Returns:

a Datum

[search for examples] [view on GitHub] [view on old javadoc] [view source]


createTimeDatum

createTimeDatum( int year, int month, int day, int hour, int minute, int second, int nano ) → Datum

creates a Datum representing the time given in integer years, months, ..., seconds, nanoseconds. The year must be at least 1000, 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 >= 1060.
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.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


createValid

createValid( String validString ) → Datum

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 - a String

Returns:

a Datum

[search for examples] [view on GitHub] [view on old javadoc] [view source]


dayContaining

dayContaining( Datum t ) → DatumRange

return a DatumRange for the day containing the given time. Midnight is contained within the following day.

Parameters

t - a time.

Returns:

the day containing the time.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


dayOfYear

dayOfYear( int month, int day, int year ) → int

return the day of year for the month and day, for the given year

Parameters

month - the month, january=1, february=2, etc.
day - day of month
year - four-digit year

Returns:

the day of year

[search for examples] [view on GitHub] [view on old javadoc] [view source]


daysInMonth

daysInMonth( int month, int year ) → int

Parameters

month - an int
year - an int

Returns:

int

[search for examples] [view on GitHub] [view on old javadoc] [view source]


floor

floor( int step, Datum datum ) → Datum

return the previous ordinal boundary if we aren't at one already.

Parameters

step - the ordinal location, such as TimeUtil.DAY or TimeUtil.HALF_YEAR
datum - the location.

Returns:

the previous ordinal boundary if we aren't at one already.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


fromDatum

fromDatum( Datum time ) → int[]

returns the 7-element array of components from the time location datum: 0:year, 1:month, 2:day, 3:hour, 4:minute, 5:second, 6:nanoseconds Note special care is taken to not use units conversions which introduce noise into the numbers, so the following units are handled directly: cdfTT2000, cdfEpoch, us2000, and mj1958. Also, a separate leap seconds table provides the leap seconds, since these are easily managed within code, removing the external dependence on a file.

Parameters

time - a Datum

Returns:

seven-element int array.

See Also:

fromJulianDayAndOffset(int, int, int)
lastLeapSecond(org.das2.datum.Datum) which uses similar code and is not used because Java doesn't have tuple results.


[search for examples] [view on GitHub] [view on old javadoc] [view source]


getJulianDay

getJulianDay( Datum datum ) → int

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 - a Datum

Returns:

an int

[search for examples] [view on GitHub] [view on old javadoc] [view source]

getJulianDay( long val, Units units ) → int

getMicroSecondsSinceMidnight

getMicroSecondsSinceMidnight( Datum datum ) → double

return the number of microseconds elapsed since the last midnight.

Parameters

datum - a Datum

Returns:

a double

[search for examples] [view on GitHub] [view on old javadoc] [view source]


getSecondsSinceMidnight

getSecondsSinceMidnight( Datum datum ) → double

return the number of seconds elapsed since the last midnight.

Parameters

datum - a Datum

Returns:

a double

[search for examples] [view on GitHub] [view on old javadoc] [view source]


isLeapYear

isLeapYear( int year ) → boolean

return the leap year for years 1901-2099.

Parameters

year - an int

Returns:

a boolean

[search for examples] [view on GitHub] [view on old javadoc] [view source]


isValidTime

isValidTime( String string ) → boolean

check to see if the string is parseable as a time.

Parameters

string - any string

Returns:

true if the string is clearly a time.

See Also:

create(java.lang.String)


[search for examples] [view on GitHub] [view on old javadoc] [view source]


julianDay

julianDay( int year, int month, int day ) → int

return the julianDay for the year month and day. This was verified against another calculation (julianDayWP, commented out above) from http://en.wikipedia.org/wiki/Julian_day. Both calculations have 20 operations. Note this does not match

Parameters

year - calendar year greater than 1582.
month - an int
day - day of month. For day of year, use month=1 and doy for day.

Returns:

the Julian day

See Also:

julianToGregorian


[search for examples] [view on GitHub] [view on old javadoc] [view source]


julianDayIMCCE

julianDayIMCCE( int YY, int MM, int DD ) → int

calculation of julianDay based on http://www.imcce.fr/en/grandpublic/temps/jour_julien.php This is slightly slower because of a cusp at 1582, but is accurate before these times.

Parameters

YY - Gregorian year
MM - Gregorian month
DD - Gregorian day

Returns:

an int

[search for examples] [view on GitHub] [view on old javadoc] [view source]


julianToGregorian

julianToGregorian( int julian ) → org.das2.datum.TimeUtil.TimeStruct

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.

See Also:

julianDay( int year, int mon, int day )


[search for examples] [view on GitHub] [view on old javadoc] [view source]


lastLeapSecond

lastLeapSecond( Datum t ) → Datum

returns the instant after the last leap second. So for example, lastLeapSecond(datum('2020-01-01T00:00')) → datum('2017-01-01T00:00Z') This code is introduced only to provide some transparency to leap second handling. Note that leap seconds before 1970-01-01 are not supported. Note that most time units do not include leap seconds, so TimeUtil.lastLeapSecond(datum('2016-12-31T23:60Z')) uses us2000 internally and the result is 2017-01-01T00:00Z, not 2015-01-01T00:00Z as one might expect.

Parameters

t - a time after 1970-01-01

Returns:

the instant after the last leap second.

See Also:

fromDatum which uses similar code. which uses similar code.


[search for examples] [view on GitHub] [view on old javadoc] [view source]


main

main( String[] args ) → void

Parameters

args - a java.lang.String[]

Returns:

void (returns nothing)

[search for examples] [view on GitHub] [view on old javadoc] [view source]


monthNameAbbrev

monthNameAbbrev( int mon ) → String

returns "Jan", "Feb", ... for month number (1..12).

Parameters

mon - integer from 1 to 12.

Returns:

three character English month name.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


monthNumber

monthNumber( String s ) → int

returns 1..12 for the English month name. (Sorry, rest of world...)

Parameters

s - the three-letter month name, jan,feb,...,nov,dec

Returns:

1,2,...,11,12 for the English month name

[search for examples] [view on GitHub] [view on old javadoc] [view source]


next

next( org.das2.datum.TimeUtil.TimeDigit td, int count, Datum datum ) → Datum

return the next boundary

Parameters

td - the boundary, e.g. TimeUtil.TD_HALF_YEAR
count - the number of boundaries
datum - the starting point.

Returns:

the boundary

[search for examples] [view on GitHub] [view on old javadoc] [view source]

next( int step, Datum datum ) → Datum

nextMidnight

nextMidnight( Datum datum ) → Datum

provide the next midnight, similar to the ceil function, noting that if the datum provided is midnight already then it is simply returned.

Parameters

datum - a Datum

Returns:

the Datum for the next day boundary.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


nextMonth

Deprecated: Use next(MONTH,datum) instead

normalize

normalize( org.das2.datum.TimeUtil.TimeStruct t ) → org.das2.datum.TimeUtil.TimeStruct

convert times like "2000-01-01T24:00" to "2000-01-02T00:00" and "2000-002T00:00" to "2000-01-02T00:00". This will only carry one to the next higher place, so 70 seconds is handled but not 130.

Parameters

t - a TimeUtil.TimeStruct

Returns:

an org.das2.datum.TimeUtil.TimeStruct

See Also:

borrow(org.das2.datum.TimeUtil.TimeStruct)


[search for examples] [view on GitHub] [view on old javadoc] [view source]


now

now( ) → Datum

return the current time as a Datum.

Returns:

the current time as a Datum.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


parseTime

parseTime( String s ) → org.das2.datum.TimeUtil.TimeStruct

parse the time into a timestruct.

Parameters

s - a String

Returns:

an org.das2.datum.TimeUtil.TimeStruct

See Also:

createValid(java.lang.String) createValid which creates a Datum.


[search for examples] [view on GitHub] [view on old javadoc] [view source]


prev

prev( int step, Datum datum ) → Datum

step down the previous ordinal. If the datum is already at an ordinal boundary, then step down by one ordinal.

Parameters

step - the ordinal location, such as TimeUtil.DAY or TimeUtil.HALF_YEAR
datum - the location.

Returns:

the prev boundary location.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


prevMidnight

prevMidnight( Datum datum ) → Datum

provide the previous midnight, similar to the floor function, noting that if the datum provided is midnight exactly then it is simply returned.

Parameters

datum - a Datum

Returns:

the Datum for the next day boundary.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


prevWeek

prevWeek( Datum datum ) → Datum

decrement by 7 days.

Parameters

datum - a Datum

Returns:

the datum

[search for examples] [view on GitHub] [view on old javadoc] [view source]


rangeContaining

rangeContaining( int count, int step, DatumRange tr ) → DatumRange

return the hours or minutes or days interval containing the time range, or multiple spans of this when the given range spans boundaries. For example, rangeContaining(1,TimeUtil.DAY,datumRange('2024-07-17T23:30/2024-07-18T00:30')) would be '2024-07-17/2024-07-19'.

Parameters

count - an int
step - the ordinal unit, such as TimeUtil.DAY or TimeUtil.HALF_YEAR
tr - the timerange

Returns:

the range containing the interval.

[search for examples] [view on GitHub] [view on old javadoc] [view source]

rangeContaining( int count, int step, Datum t ) → DatumRange

roundNDigits

roundNDigits( org.das2.datum.TimeUtil.TimeStruct ts, int n ) → org.das2.datum.TimeUtil.TimeStruct

round seconds to N decimal places. For example, n=3 means round to the millisecond.

Parameters

ts - a time structure
n - number of digits, 3 is millis, 6 is micros.

Returns:

rounded and normalized TimeStruct.

[search for examples] [view on GitHub] [view on old javadoc] [view source]


subtract

subtract( org.das2.datum.TimeUtil.TimeStruct a, org.das2.datum.TimeUtil.TimeStruct b ) → org.das2.datum.TimeUtil.TimeStruct

Parameters

a - a TimeUtil.TimeStruct
b - a TimeUtil.TimeStruct

Returns:

org.das2.datum.TimeUtil.TimeStruct

[search for examples] [view on GitHub] [view on old javadoc] [view source]


toDatum

toDatum( org.das2.datum.TimeUtil.TimeStruct d ) → Datum

convert to Datum without regard to the type of unit used to represent time. This will use the canonical Units.us2000 for time locations, which does not represent leap seconds.

Parameters

d - the decomposed time or time width.

Returns:

the Datum.

[search for examples] [view on GitHub] [view on old javadoc] [view source]

toDatum( org.das2.datum.TimeUtil.TimeStruct d, Units u ) → Datum
toDatum( int[] timeArray ) → Datum
toDatum( int[] timeArray, Units u ) → Datum

toDatumDuration

toDatumDuration( int[] timeArray ) → Datum

return approximate duration in Units.seconds or in Units.days. This is assuming a year is 365 days, a month is 30 days, and a day is 86400 seconds.

Parameters

timeArray - 6 or 7 element array [ yrs, months, days, hours, minutes, seconds, nanos ]

Returns:

a Datum

See Also:

DatumRangeUtil#parseISO8601Duration(java.lang.String)


[search for examples] [view on GitHub] [view on old javadoc] [view source]


toTimeArray

Deprecated: use 7-element fromDatum instead, which is consistent with toDatum. Note the array elements are different!

toTimeStruct

toTimeStruct( org.das2.datum.Datum.Long datum ) → org.das2.datum.TimeUtil.TimeStruct

splits the time location datum into y,m,d,etc components, using the full precision of the Long backing the Datum. The datum can have the units of ms1970 or cdf_tt2000, and

Parameters

datum - with time location units.

Returns:

TimeStruct containing the time components.

[search for examples] [view on GitHub] [view on old javadoc] [view source]

toTimeStruct( Datum datum ) → org.das2.datum.TimeUtil.TimeStruct