-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for z, zz, zzz in format_datetime #11323
Add support for z, zz, zzz in format_datetime #11323
Conversation
This pull request was exported from Phabricator. Differential Revision: D64774281 |
✅ Deploy Preview for meta-velox canceled.
|
This pull request was exported from Phabricator. Differential Revision: D64774281 |
b334ff8
to
c25e493
Compare
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
This pull request was exported from Phabricator. Differential Revision: D64774281 |
c25e493
to
765a214
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
765a214
to
1456915
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
1456915
to
b59553f
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
b59553f
to
1b36f78
Compare
"Date format specifier is not supported: {} ({})", | ||
getSpecifierName(token.pattern.specifier), | ||
token.pattern.minRepresentDigits); | ||
if (token.pattern.minRepresentDigits == 1) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe a comment explaining what these magic numbers mean?
if (timezone == nullptr) { | ||
VELOX_USER_FAIL("Timezone unknown"); | ||
const std::string& abbrev = | ||
tz::locateZone(timezone->id()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could we instead extend the TimeZone object to carry the timezone abbreviated name as well, so here we could just:
timezone->shortName()
(also, you don't need to tz::locateZone() if you already have the TimeZone*)
@@ -347,6 +347,126 @@ int64_t parseTimezone(const char* cur, const char* end, Date& date) { | |||
return -1; | |||
} | |||
|
|||
// Contains a list of all time zone names in a convenient format for searching. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
see my comment below, but should we encapsulate this logic within the TimeZone object? So these things could be exposed under a more convenient API like
timezone->name();
timezone->shortName();
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
1b36f78
to
310267d
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
1 similar comment
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
310267d
to
d8b960c
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
d8b960c
to
42fc81b
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
38abcb5
to
4bcace6
Compare
Summary: Pull Request resolved: facebookincubator#11323 This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Differential Revision: D64774281
This pull request was exported from Phabricator. Differential Revision: D64774281 |
4bcace6
to
022663c
Compare
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
022663c
to
0b636fb
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
0b636fb
to
1911364
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
…or#11283) Summary: The format_datetime currently outptus the time zone id if for 3 or fewer 'z' characters in the format string. However, the JODA library, which this is based on, does this for 3 or more 'Z' characters. This diff fixes this, as well as adds support for a single 'Z' (which outputs the same thing as 'ZZ' just without the colon). So 'Z' is fully supported for any number of characters. To be more explicit: https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html From the JODA docs: `'Z' outputs offset without a colon (-0800), 'ZZ' outputs the offset with a colon(-08:00), 'ZZZ' or more outputs the zone id(America/Los_Angeles).` And not clearly explained in the docs, but from experimentation: `'z', 'zz', or 'zzz' outputs the abbreviation of the time zone(PDT), and 'zzzz' or more outputs the time zone name(Pacific Daylight Time)` Currently DateTimeFormatter treats 'zzzz' or more like JODA treats 'ZZZ' or more. This diff marks 'zzzz' or more as unsupported (we can implement that in a future change), and moves that logic under 'ZZZ' or more to be consistent. It also implements 'Z' (previously only 'ZZ' was implemented in DateTimeFormatter). Reviewed By: bikramSingh91 Differential Revision: D64500193
Summary: This diff adds support for JODA's ZZZ pattern in Presto's parse_datetime function. This is used to parse time zone IDs (called "time zone names" in the tz library, but this means something else in JODA). I borrowed the algorithm from JODA to ensure it matches Presto Java's behavior. The idea is to greedily consume the longest substring that matches a known time zone. I borrowed their algorithm which is to break the set of known time zones into a list of those without a prefix (without the '/' character) and lists of suffixes for those with prefixes. This limits the number of strings that need to be compared. I modified it slightly to pre-sort these lists by size descending, so we don't have to necessarily compare every string, but can stop early if we find a match. One other change is I added a get_time_zone_names function to our copy of the tz library. I tried calling get_tzdb() from DateTimeFormatter directly and accessing its zones member to get the names, but for some reason after get_tzdb() returns every time_zone in zones (except the first one) has a string name_ that has nullptr for its data after get_tzdb() returns. I spent a good amount of time trying to figure out why, but couldn't figure it out, so I gave up and added this helper method (for whatever reason everything is fine as long as it's done in the tz.cpp file). If anyone has pointers as to what's going on I'm happy to investigate further, I'd much rather use the existing get_tzdb function if I can. Reviewed By: bikramSingh91 Differential Revision: D64708598
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
1911364
to
a05b1c7
Compare
This pull request was exported from Phabricator. Differential Revision: D64774281 |
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @kevinwilfong
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
Summary: This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's forma_datetime function. This is used to format time zone abbreviations. Reviewed By: pedroerp Differential Revision: D64774281
This pull request has been merged in b31a48e. |
Summary:
This diff adds support for JODA's z, zz, zzz patterns (all equivalent) in Presto's
forma_datetime function.
This is used to format time zone abbreviations.
Differential Revision: D64774281