Skip to content
Merged
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
13 changes: 12 additions & 1 deletion faker/providers/date_time/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from datetime import MAXYEAR, timedelta

from dateutil import relativedelta
from dateutil.tz import tzlocal, tzutc
from dateutil.tz import gettz, tzlocal, tzutc

from faker.utils.datetime_safe import date, datetime, real_date, real_datetime

Expand Down Expand Up @@ -1985,6 +1985,17 @@ def timezone(self):
return self.generator.random.choice(
self.random_element(self.countries)['timezones'])

def pytimezone(self, *args, **kwargs):
"""
Generate a random timezone (see `faker.timezone` for any args)
and return as a python object usable as a `tzinfo` to `datetime`
or other fakers.

:example faker.pytimezone()
:return dateutil.tz.tz.tzfile
"""
return gettz(self.timezone(*args, **kwargs))

def date_of_birth(self, tzinfo=None, minimum_age=0, maximum_age=115):
"""
Generate a random date of birth represented as a Date object,
Expand Down
10 changes: 10 additions & 0 deletions tests/providers/test_date_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,16 @@ def test_timezone_conversion(self):
today_back = datetime.fromtimestamp(timestamp, utc).date()
assert today == today_back

def test_pytimezone(self):
import dateutil
pytz = self.fake.pytimezone()
assert isinstance(pytz, dateutil.tz.tz.tzfile)

def test_pytimezone_usable(self):
pytz = self.fake.pytimezone()
date = datetime(2000, 1, 1, tzinfo=pytz)
assert date.tzinfo == pytz

def test_datetime_safe(self):
from faker.utils import datetime_safe
# test using example provided in module
Expand Down