Closed andig closed 1 year ago
Update: noticed that DateTime
supports custom format via DateTimeFormat
. Unfortunately that is a global setting and cannot be adjusted per chargepoint.
RFC3339 indeed doesn't support a timestamp without explicit timezone and I oversimplified the ISO8601 support, due to it actually being a huge collection of different formats (see https://ijmacd.github.io/rfc3339-iso8601/).
I'd fix this by supporting all ISO8601 via an external lib. Shouldn't break anything and instead add more flexibility.
That would imho be preferable over a fallback global format 👍🏻
Added the improved ISO8601 parsing.
The DateTimeFormat
global variable is still used for sending messages: this allows to configure the lib to use a specific (if any) format for marshaling timestamps. This can be set to arbitrary format. If set to empty (""
), it will use the internal Go default (RFC3339, which is ISO8601-compatible in that case).
The DateTimeFormat global variable is still used for sending messages: this allows to configure the lib to use a specific (if any) format for marshaling timestamps.
Problem remains that this approach does not allow to mix different charge points. The format should be per CP instead of global in order to be useful beyond the most basic case?
Problem remains that this approach does not allow to mix different charge points. The format should be per CP instead of global in order to be useful beyond the most basic case?
You expect sending timestamps in different formats to different clients? Why? By sending an ISO-formatted timestamp to all of them it wouldn't cause any issue, assuming the charge points implement the spec correctly.
Please don't get me wrong- I haven't seen this particular issue in the wild yet.
By sending an ISO-formatted timestamp to all of them it wouldn't cause any issue, assuming the charge points implement the spec correctly.
If that wasn't the case, the global fallback setting would not be needed at all, right?
If that wasn't the case, the global fallback setting would not be needed at all, right?
Totally true for servers. The fallback was originally meant for charge points, in case a vendor wishes to enforce a specific format of the ISO standard.
I'm really hoping to keep this as simple as possible tbh. If this is ever needed I can think of two ways to make this dynamic though:
DateTime
struct itself. This would need to be passed at runtime for every message. It would offer the best flexibility but would require a bit more effort for the applicationsTotally true for servers. The fallback was originally meant for charge points, in case a vendor wishes to enforce a specific format of the ISO standard.
Oh yeah, I've had our server use case in mind. Let's solve this when it really becomes a problem.
Thank you for all the efforts spend with maintaining this great library!
In https://github.com/evcc-io/evcc/issues/10399 we've noticed that timestamps in the form of are rejected:
https://github.com/evcc-io/evcc/issues/10399#issuecomment-1772535765 found:
This seems to indicate that parsing local time zone should be possible, too?