Deal with local datetimes, dates, and times better #307
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.
The exact behaviour of a local datetime is not precisely defined:
So this is how this implementation will deal with it:
Use the local timezone, for example "WITA +0800" in my case.
However, use the new toml.Local* timezones to do so instead of
time.Local. This has the same offset, but you can compare/use this:
if mytime.Location() == toml.LocalTime {
...
}
Without this information it's hard to know if we're dealing with a date,
time, or local datetime. How would I distinguish between a "datetime
with the TZ set to whatever my local time zone is" and "a local
datetime"? Or how do I know that the time 00:00:00 means it's not
specified at all vs. just midnight?
An alternative solution would be add this to the MetaData, but I think
this is nicer as it's part of the time.Time.
The downside is that "fmt.Println(mytime)" will print "local-datetime"
as the "timezone". I think that's okay, and actually useful as it
signals you forgot to do something with this local date. As the spec
says:
(Aside: to be honest I'm not sure this entire feature was really a good idea –
times and timezones are already hard enough, and you can represent this
kind of stuff as just strings too; but it's in there so we have to deal
with it.)