Class TimeMapper

java.lang.Object
uk.ac.starlink.table.TimeMapper
All Implemented Interfaces:
DomainMapper

public abstract class TimeMapper extends Object implements DomainMapper
DomainMapper for mapping values to epochs in a common time scale.
Since:
12 Aug 2013
Author:
Mark Taylor
  • Field Details

    • DECIMAL_YEAR

      public static final TimeMapper DECIMAL_YEAR
      Mapper for numeric values in decimal year (since 0 AD).
    • MJD

      public static final TimeMapper MJD
      Mapper for numeric values in Modified Julian Date.
    • JD

      public static final TimeMapper JD
      Mapper for numeric values in Julian Day.
    • UNIX_SECONDS

      public static final TimeMapper UNIX_SECONDS
      Mapper for numeric values (already) in unix seconds.
    • ISO_8601

      public static final TimeMapper ISO_8601
      Mapper for ISO-8601 strings.
  • Constructor Details

    • TimeMapper

      protected TimeMapper(Class<?> sourceClass, String sourceName, String sourceDescription)
      Constructor.
      Parameters:
      sourceClass - source class
      sourceName - source type name
      sourceDescription - source type description
  • Method Details

    • getTargetDomain

      public TimeDomain getTargetDomain()
      Specified by:
      getTargetDomain in interface DomainMapper
      Returns:
      domain identifier
    • getSourceClass

      public Class<?> getSourceClass()
      Description copied from interface: DomainMapper
      Returns the type of values from which this mapper instance can convert. This should be as specific as possible to cover all the possible options, but in some cases that may mean it has simply to return Object.class.
      Specified by:
      getSourceClass in interface DomainMapper
      Returns:
      class of mappable source objects to which this mapper can be applied
    • getSourceName

      public String getSourceName()
      Description copied from interface: DomainMapper
      Returns a short name for the type of source values which this mapper can convert from.
      Specified by:
      getSourceName in interface DomainMapper
      Returns:
      mapper source type name
    • getSourceDescription

      public String getSourceDescription()
      Description copied from interface: DomainMapper
      Returns a description of the type of source values which this mapper can convert from.
      Specified by:
      getSourceDescription in interface DomainMapper
      Returns:
      mapper source type description
    • toUnixSeconds

      public abstract double toUnixSeconds(Object sourceValue)
      Maps a source value to time in seconds since the Unix epoch (1970-01-01T00:00:00). The time scale is generally assumed to be UTC, though conversions may not always be performed, for instance for values in which the intended time scale is not obvious.

      A java (IEEE 754) double has 52+1 bits of precision, which I make 52*ln(2)/ln(10)=15.65 decimal places, and a year contains 3.15e7 seconds, which gives you the following precisions:

      • epoch +/- 1.7 months: 1 nanosecond precision
      • epoch +/- 140 years: 1 microsecond precision
      • epoch +/- 140 kyears: 1 millisecond precision
      • epoch +/- 140 Myears: 1 second precision
      That means around microsecond precision for values near the current epoch (unless this software proves more long lasting than I anticipate). It should be OK for most purposes.
      Parameters:
      sourceValue - value in source domain
      Returns:
      number of seconds since midnight 1 Jan 1970
    • getTimeMappers

      public static TimeMapper[] getTimeMappers()
      Returns a selection of time mapper instances.