anchor.diff:    member this.Next with get() : TimePeriod = TimePeriod(addPeriods 1L this.value)
     member this.Previous with get() : TimePeriod = TimePeriod(addPeriods -1L this.value)
   
  +  static member op_Explicit(timePeriod:TimePeriod) : DateTimeOffset = timePeriod.Start
  +  static member op_Explicit(timePeriod:TimePeriod) : DateTime = timePeriod.Start.DateTime
  +
     static member Hash(tp:TimePeriod) = TimePeriod(bucketHash (tp.value) (unitPeriod (tp.value)))
     static member SubKey(tp:TimePeriod) = addressSubIndex (tp.value) (unitPeriod (tp.value))
     static member Key(bucket:TimePeriod, subIndex:uint16) = TimePeriod(addressToTimePeriodValue (bucket.value) subIndex)
  
positive.code:   | Day = 5           //     864 000 000 000 ticks
    | Month = 6         //                  Variable
    | Eternity = 7      //                  Infinity
  
  [<CustomComparison;CustomEquality>]
  type TimePeriod =
  
negative.code: 
  
    let inline milliseconds (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv) && getMsecInDay(tpv) < msecPerDay)
      getMsecInDay(tpv) % 1000L
    let inline seconds (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv) && getMsecInDay(tpv) < msecPerDay)
      (getMsecInDay(tpv) / msecPerSec) % 60L
    let inline minutes (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv) && getMsecInDay(tpv) < msecPerDay)
      (getMsecInDay(tpv) / msecPerMinute) % 60L
    let inline hours (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv) && getMsecInDay(tpv) < msecPerDay)
      (getMsecInDay(tpv) / msecPerHour) % 24L
    let inline days (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv))
      (getDays(tpv)) + 1L
    // 1 based like in calendar
    let inline months (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv))
      (getMonths(tpv) % 12L) + 1L
    let inline years (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv))
      (getMonths(tpv) / 12L) + 1900L
    let inline length (tpv:int64) : int64 = 
      Debug.Assert(not (isTick tpv))
      getLength(tpv)
    let inline unitPeriod (tpv:int64) : UnitPeriod =
      LanguagePrimitives.EnumOfValue <| int (getUnitPeriod tpv)
  