Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
*.pyc
build
*.swp
venv

.tags
tags
Expand Down
21 changes: 14 additions & 7 deletions jdatetime/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,10 @@ def __repr__(self):
def __str__(self):
return self.strftime('%Y-%m-%d')

def __format__(self, _format):
_format = _format or '%Y-%m-%d'
return self.strftime(_format)

def __add__(self, timedelta):
"""x.__add__(y) <==> x+y"""
if isinstance(timedelta, py_datetime.timedelta):
Expand Down Expand Up @@ -548,13 +552,6 @@ def isoformat(self):
"""Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'"""
return self.strftime('%Y-%m-%d')

def __format__(self, format):
"""
PEP-3101
Make string formating work!
"""
return self.strftime(format)

# strftime helper functions
def _strftime_get_attr_value(self, attr, fmt, fb=None):
try:
Expand Down Expand Up @@ -1201,6 +1198,16 @@ def __str__(self):
tz = self.strftime('%z')
return self.strftime('%Y-%m-%d %H:%M:%S') + f'{mil}{tz}'

def __format__(self, _format):
if _format == 's':
return str(int(self.timestamp()))
if _format == 'f':
return str(self.timestamp())
if _format:
return self.strftime(_format)
else:
return self.__str__()

def aslocale(self, locale):
return datetime(
self.year,
Expand Down
5 changes: 5 additions & 0 deletions tests/test_jdate.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,8 @@ def test_fromisoformat(self):

with self.assertRaises(TypeError, msg='fromisoformat: argument must be str'):
jdatetime.date.fromisoformat(1)

def test_format(self):
d = jdatetime.date(1402, 5, 15)
self.assertEqual(f'{d}', '1402-05-15')
self.assertEqual(f'{d:%Y/%m/%d}', '1402/05/15')
12 changes: 12 additions & 0 deletions tests/test_jdatetime.py
Original file line number Diff line number Diff line change
Expand Up @@ -1062,3 +1062,15 @@ def test_unknown_type_operations(self):
r"unsupported operand type\(s\) for \-=: 'datetime' and 'object'",
):
dt -= unknown_type

def test_date_format(self):
d = jdatetime.date(1402, 5, 15)
self.assertEqual(f'{d}', '1402-05-15')
self.assertEqual(f'{d:%Y/%m/%d}', '1402/05/15')

def test_datetime_format(self):
dt = jdatetime.datetime(1402, 5, 15, 12, 30, 45)
self.assertEqual(f'{dt}', '1402-05-15 12:30:45')
self.assertEqual(f'{dt:%Y/%m/%d %H:%M}', '1402/05/15 12:30')
self.assertIn('.', f'{dt:f}') # float timestamp
self.assertNotIn('.', f'{dt:s}') # int timestamp