Timestamp.fs 821 B

1234567891011121314151617181920212223242526
  1. namespace FSharp.Data.Tdms
  2. open System
  3. open System.Runtime.CompilerServices
  4. #if !IS_DESIGNTIME
  5. [<Struct; IsReadOnly>]
  6. #else
  7. [<Struct>]
  8. #endif
  9. type Timestamp =
  10. { FractionsOfASecond: uint64
  11. SecondsSinceNiEpoch: int64 }
  12. module Timestamp =
  13. let niEpochDateTime = DateTime(1904, 1, 1, 0, 0, 0, DateTimeKind.Utc)
  14. let niEpochDateTimeOffset = DateTimeOffset(1904, 1, 1, 0, 0, 0, TimeSpan.Zero)
  15. let toTimeSpan { SecondsSinceNiEpoch = secondsSinceNiEpoch; FractionsOfASecond = fractionsOfASecond } =
  16. TimeSpan.FromSeconds (float secondsSinceNiEpoch) + TimeSpan.FromSeconds (float fractionsOfASecond / float UInt64.MaxValue)
  17. let toDateTime timestamp = (niEpochDateTime + toTimeSpan timestamp).ToLocalTime()
  18. let toDateTimeOffset timestamp = (niEpochDateTimeOffset + toTimeSpan timestamp).ToLocalTime()