Skip to content

Commit 2d8657b

Browse files
committed
Fix the behavior of the YY token in from_format()
1 parent 9c58884 commit 2d8657b

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Change Log
22

3+
## [Unreleased]
4+
5+
## Fixed
6+
7+
- Fixed behavior of the `YY` token in `from_format()`.
8+
9+
310
## [2.0.0] - 2018-05-08
411

512
### Added

pendulum/formatting/formatter.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class Formatter:
187187

188188
_PARSE_TOKENS = {
189189
'YYYY': lambda year: int(year),
190-
'YY': lambda year: 1900 + int(year),
190+
'YY': lambda year: int(year),
191191
'Q': lambda quarter: int(quarter),
192192
'MMMM': lambda month: month,
193193
'MMM': lambda month: month,
@@ -399,7 +399,7 @@ def parse(self,
399399
if not re.match(pattern, time):
400400
raise ValueError('String does not match format {}'.format(fmt))
401401

402-
re.sub(pattern, lambda m: self._get_parsed_values(m, parsed, locale), time)
402+
re.sub(pattern, lambda m: self._get_parsed_values(m, parsed, locale, now), time)
403403

404404
return self._check_parsed(parsed, now)
405405

@@ -526,21 +526,24 @@ def _check_parsed(self, parsed, now
526526

527527
return validated
528528

529-
def _get_parsed_values(self, m, parsed, locale
530-
): # type: (..., dict, Locale) -> None
529+
def _get_parsed_values(self, m, parsed, locale, now
530+
): # type: (..., dict, Locale, pendulum.DateTime) -> None
531531
for token, index in m.re.groupindex.items():
532532
if token in self._LOCALIZABLE_TOKENS:
533533
self._get_parsed_locale_value(
534534
token, m.group(index), parsed, locale
535535
)
536536
else:
537-
self._get_parsed_value(token, m.group(index), parsed)
537+
self._get_parsed_value(token, m.group(index), parsed, now)
538538

539-
def _get_parsed_value(self, token, value, parsed
540-
): # type: (str, str, dict) -> None
539+
def _get_parsed_value(self, token, value, parsed, now
540+
): # type: (str, str, dict, pendulum.DateTime) -> None
541541
parsed_token = self._PARSE_TOKENS[token](value)
542542

543543
if 'Y' in token:
544+
if token == 'YY':
545+
parsed_token = now.year // 100 * 100 + parsed_token
546+
544547
parsed['year'] = parsed_token
545548
elif 'Q' == token:
546549
parsed['quarter'] = parsed_token

tests/datetime/test_from_format.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ def test_from_format_with_millis():
4747
('12/02/1999', 'DD/MM/YYYY', '1999-02-12T00:00:00+00:00', None),
4848
('12_02_1999', 'DD_MM_YYYY', '1999-02-12T00:00:00+00:00', None),
4949
('12:02:1999', 'DD:MM:YYYY', '1999-02-12T00:00:00+00:00', None),
50-
('2-2-99', 'D-M-YY', '1999-02-02T00:00:00+00:00', None),
51-
('99', 'YY', '1999-01-01T00:00:00+00:00', None),
50+
('2-2-99', 'D-M-YY', '2099-02-02T00:00:00+00:00', None),
51+
('2-2-99', 'D-M-YY', '1999-02-02T00:00:00+00:00', '1990-01-01'),
52+
('99', 'YY', '2099-01-01T00:00:00+00:00', None),
5253
('300-1999', 'DDD-YYYY', '1999-10-27T00:00:00+00:00', None),
5354
('12-02-1999 2:45:10', 'DD-MM-YYYY h:m:s', '1999-02-12T02:45:10+00:00', None),
5455
('12-02-1999 12:45:10', 'DD-MM-YYYY h:m:s', '1999-02-12T12:45:10+00:00', None),

0 commit comments

Comments
 (0)