Add TimeMode encoding option TimeRFC3339NanoUTC#688
Merged
Conversation
This commit adds TimeMode encoding option TimeRFC3339NanoUTC which causes time.Time to encode to a CBOR time (tag 0) with a text string content representing UTC time using nanosecond precision in RFC3339 format.
Owner
Author
|
@x448 PTAL |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #687
This PR adds
TimeRFC3339NanoUTCoption to encodetime.Timeto CBOR time (tag 0) with a text string content representing UTC time with nanosecond precision in RFC3339 format.While at it, also refactored some existing tests and added more tests.
NOTE: The TimeUnix option (default setting) uses 1-second precision, UTC, and encodes to integer (CBOR tag 1). It is the recommended setting unless you need fractional seconds.
If user apps need to encode UTC time with nanosecond precision to integer (instead of string), then that is supported by this library in the API for user-defined CBOR tags.
Thanks @ssanderson for suggesting this feature (TimeRFC3339NanoUTC) at:
Context
RFC 8949 defines CBOR tag 0 (time encoded to string value) and CBOR tag 1 (time encoded to integer or floating point).
Unfortunately, RFC 8949 does not define an integer representation of time with sub-second precision.
To comply with RFC 8949 for CBOR tag 1, the
TimeUnixMicrooption encodes POSIX [TIME_T] in UTC to floating point (instead of encoding to integer).Since floating point is too lossy for some use cases, this PR added another option for CBOR tag 0 (time encoded to string value).