Class TimeMapper

  • All Implemented Interfaces:
    DomainMapper

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

      Constructors 
      Modifier Constructor Description
      protected TimeMapper​(java.lang.Class<?> sourceClass, java.lang.String sourceName, java.lang.String sourceDescription)
      Constructor.
    • Field Detail

      • 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 Detail

      • TimeMapper

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

      • getSourceClass

        public java.lang.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 java.lang.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 java.lang.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​(java.lang.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.