Skip to content
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

Closed

Conversation

kevinwilfong
Copy link
Contributor

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

@facebook-github-bot facebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Oct 22, 2024
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

Copy link

netlify bot commented Oct 22, 2024

Deploy Preview for meta-velox canceled.

Name Link
🔨 Latest commit a05b1c7
🔍 Latest deploy log https://app.netlify.com/sites/meta-velox/deploys/671fd635e5951700087ffbb0

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 22, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 22, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 22, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 22, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 22, 2024
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
"Date format specifier is not supported: {} ({})",
getSpecifierName(token.pattern.specifier),
token.pattern.minRepresentDigits);
if (token.pattern.minRepresentDigits == 1) {
Copy link
Contributor

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())
Copy link
Contributor

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.
Copy link
Contributor

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();

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 24, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

1 similar comment
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 24, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 24, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 25, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 25, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 28, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 28, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

Kevin Wilfong added 3 commits October 28, 2024 11:21
…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
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D64774281

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 28, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 28, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 28, 2024
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
Copy link
Contributor

@pedroerp pedroerp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @kevinwilfong

kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 28, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 29, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 29, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 29, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 29, 2024
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
kevinwilfong pushed a commit to kevinwilfong/velox that referenced this pull request Oct 29, 2024
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
@facebook-github-bot
Copy link
Contributor

This pull request has been merged in b31a48e.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported Merged
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants