org.das2.datum.TimeParser

TimeParser designed to quickly parse strings with a known format. This parser has been shown to perform around 20 times faster than the discovery parser. This class is not thread-safe, so clients must make sure that only one thread accesses the class at a time.


TIMEFORMAT_Z

$Y-$m-$dT$H:$M:$S.$(subsec;places=3)Z


IGNORE_FIELD_HANDLER

handy FieldHandler that ignores the contents. For example,

tp= TimeParser.create(sagg,"v", TimeParser.IGNORE_FIELD_HANDLER );


create

create( String formatString ) → TimeParser

Create a TimeParser object, which is the fast time parser for use when a known format specification is used to parse many instances of a formatted string. For example, this would be used to interpret the times in an text file, but not times entered in a time range GUI to control an axis. This can also be and is used for filenames, for example omni2_h0_mrg1hr_$Y$(m,span=6)01_v01.cdf. Note field lengths are used when formatting the data, but when parsing often fractional components are accepted. For example, the format might be "%Y %j %H", and "2012 365 12.003" is accepted. Note also that often $(Y) is used where %{Y} is used. These are equivalent, and useful when $() interferes with parsing elsewhere. URI_Templates is a public project with translations to Java, JavaScript, and Python, and provides an specification for this. See https://github.com/hapi-server/uri-templates/wiki/Specification .

  $[fieldLength]<1-char code>  or
  $[fieldLength]()
  $[fieldLength](;qualifiers)

  fieldLength=0 --> makes field length indeterminate, deliminator must follow.

  $Y   4-digit year
  $y   2-digit year
  $j   3-digit day of year
  $m   2-digit month
  $b   3-char month name (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec.  Sorry, rest of world...)
  $d   2-digit day
  $H   2-digit hour
  $M   2-digit minute
  $S   2-digit second
  $(milli)  3-digit milliseconds
  $(ignore) skip this field
  $x   skip this field
  $(enum)  skip this field.  If id is specified, then id can be retrieved.
  $v   skip this field
  $(hrinterval;values=0,1,2,3)  enumeration of part of day
  $(subsec;places=6)  fractional seconds (6->microseconds)
  $(periodic;offset=0;start=2000-001;period=P1D)

 Qualifiers:
    span=
    delta=
    Y=2004  Also for Y,m,d,H,M,S

   For example:
      $(j;Y=2004) means the day-of-year, within the year 2004.
      $(H;Y=2004;j=117) means the hour of day 2004-117
      $(m;span=6) means the 6-month interval starting at the given month.

  

Parameters

formatString - the format string.

Returns:

the time parser.

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

create( String formatString, String fieldName, org.das2.datum.TimeParser.FieldHandler handler, java.lang.Object[] moreHandler ) → TimeParser

format

format( DatumRange range ) → String

return the formatted range. This actually returns the range that contains the min of the given range.

Parameters

range - a DatumRange

Returns:

a String

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

format( Datum start ) → String
format( Datum start, Datum stop ) → String
format( Datum start, Datum stop, java.util.Map extra ) → String

getEndTime

getEndTime( Units units ) → double

return the end time of the range in units, e.g. Units.us2000

Parameters

units - an Units

Returns:

a double

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


getFieldHandlerByCode

getFieldHandlerByCode( String code ) → FieldHandler

return the field handler for the id. For example, enum returns the field handler handling enumerations. Note there is currently only one field handler for each type, so for example two enumerations are not allowed.

Parameters

code - a String

Returns:

the field handler.

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


getFieldHandlerById

getFieldHandlerById( String id ) → FieldHandler

return the field handler for the id. For example, enum returns the field handler handling enumerations. Note there is currently only one field handler for each type, so for example two enumerations are not allowed.

Parameters

id - the field handler id

Returns:

the field handler.

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


getPad

getPad( java.util.Map args ) → char

return the pad for the spec, like "underscore" "space" "zero" or "none" For "none", space is returned, and clients allowing special behavior should check for this.

Parameters

args - a java.util.Map

Returns:

the char, or (char)0.

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


getRegex

getRegex( ) → String

peek at the regular expression used.

Returns:

a String

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


getTime

getTime( Units units ) → double

return the parsed time in the given units. Here Autoplot Jython code shows how this is used: from org.virbo.dataset import SemanticOps tp= TimeParser.create("$Y-$m-$dT$H") u= SemanticOps.lookupTimeUnits("seconds since 2014-01-01T00:00") print tp.parse("2014-01-06T02").getTime( u )

Parameters

units - as in Units.us2000

Returns:

the value in the given units.

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


getTimeDatum

getTimeDatum( ) → Datum

return the parsed time as a Datum. For years less than 1990, Units.us1980 is used, otherwise Units.us2000 is used.

Returns:

a datum representing the parsed time.

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


getTimeRange

getTimeRange( ) → DatumRange

Returns the implicit interval as a DatumRange. For example, "Jan 1, 2003" would have a getTimeDatum of "Jan 1, 2003 00:00:00", and getDatumRange() would go from midnight to midnight. This will try to create MonthDatumRanges when possible, to keep it abstract, so for example,

tr= tp.getTimeRange()  // "Jan 2015"
tr= tr.next()          // "Feb 2015", not 31 days starting Feb 1
This accesses time, timeWidth, orbitDatumRange, startTime.

Returns:

the DatumRange

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


getValidRange

getValidRange( ) → DatumRange

return the limits of the range we can parse. These limits come from orbit files like "$(o,sc=rbspa-pp)" or from explicit fields like "$(M,Y=1999)"

Returns:

a DatumRange

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


hasField

hasField( String field ) → boolean

return true if the parser has a field.

Parameters

field - e.g. "x"

Returns:

true if the parser has a field.

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


isIso8601String

isIso8601String( String exampleTime ) → boolean

return true if the string appears to be an ISO8601 time. This requires that the string contain a "T" or space and the hours and minutes components.

Parameters

exampleTime - string like "1992-353T02:00"

Returns:

true if the string appears to be an ISO8601 time.

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


isNested

isNested( ) → boolean

return true if each successive field is nested within the previous, e.g. $Y$m/$d is nested, but $Y$m/$Y$m$d is not because of the second $Y.

Returns:

true if the spec is nested.

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


isSpec

isSpec( String spec ) → boolean

Provide standard means of indicating this appears to be a spec by looking for something that would assert the year.

Parameters

spec - a String

Returns:

true if the string appears to be a spec.

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


isStartTimeOnly

isStartTimeOnly( ) → boolean

true if the flag (startTimeOnly) was set in the spec. This is a hint to clients (FileStorageModel) using the time that it shouldn't infer that the time is bounded.

Returns:

a boolean

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


iso8601String

iso8601String( String exampleTime ) → String

must contain T or space to delimit date and time.

Parameters

exampleTime - "1992-353T02:00"

Returns:

"$Y-$jT$H$M" etc.

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


main

main( java.lang.String[] aa ) → void

Parameters

aa - a java.lang.String[]

Returns:

void (returns nothing)

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


parse

parse( String timeString ) → TimeParser

parse the string, which presumably contains a time matching the spec. A reference to the TimeParser is returned so operations can be chained together: tp.parse("2014-01-06T02").getTime( Units.us2000 ) Since this the TimeParser has a state, it is not safe to use simultaneously by multiple threads. Each thread should create its own parser.

Parameters

timeString - string containing a time

Returns:

a reference to this TimeParser object, which now contains the time.

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

parse( String timeString, java.util.Map extra ) → TimeParser

setContext

setContext( DatumRange tr ) → void

explicitly set the context for time parsing. For example, filenames are just $H$M$S.dat, and the context is "Jan 17th, 2015" Note that the context is stored internally as just a start time, so spans (e.g. 3-day) are not supported.

Parameters

tr - the range

Returns:

void (returns nothing)

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


setDigit

setDigit( String format, double value ) → void

set the digit with the integer part, and move the fractional part to the less significant digits. Format should contain just one field, see setDigit( String format, int value ) to break up fields.

Parameters

format - like "Y"
value - like 2014

Returns:

void (returns nothing)

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

setDigit( String format, int value ) → TimeParser
setDigit( int digitNumber, int digit ) → TimeParser

sloppyColumns

sloppyColumns( ) → void

force the parser to look for delimiters. This should be called immediately after

Returns:

void (returns nothing)

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


testTimeParser

testTimeParser( ) → void

test time parsing when the format is known. This time parser is much faster than the time parser of Test009, which must infer the format as it parses.

Returns:

void (returns nothing)

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


toString

toString( ) → String

Returns:

java.lang.String

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