from .base import Generator, fake


class DateTime(Generator):

    def generate(self):
        while True:
            yield fake.date_time()


class Date(DateTime):

    def generate(self):
        for dt in super(Date, self).generate():
            yield dt.date()


class Time(DateTime):

    def generate(self):
        for dt in super(Date, self).generate():
            yield dt.time()

@@ -1,145 +1,1008 @@
-from .base import Generator, fake%0A%0A%0Aclass DateTime(Generator):%0A%0A    def generate(self):%0A        while True:%0A            yield fake.date_time(
+import random%0Afrom datetime import datetime%0Afrom time import mktime%0A%0Afrom dateutil.tz import tzlocal%0A%0Afrom .base import Generator%0A%0A%0Adef to_timestamp(dt):%0A    if getattr(dt, 'tzinfo', None) is not None:%0A        dt = dt.astimezone(tzlocal())%0A    return mktime(dt.timetuple())%0A%0A%0Aclass DateTime(Generator):%0A%0A    def get_arguments(self, past=True, future=False, **kwargs):%0A        super(DateTime, self).get_arguments(**kwargs)%0A%0A        self.past = past%0A        self.future = future%0A%0A    def generate(self):%0A        if not self.past:%0A            start = to_timestamp(datetime.now())%0A        else:%0A            # try not to go too far in the past%0A            start = to_timestamp(datetime(1900, 1, 1))%0A%0A        if self.future:%0A            # try not to go too far in the future%0A            stop = to_timestamp(datetime(2100, 1, 1))%0A        else:%0A            stop = to_timestamp(datetime.now())%0A%0A        while True:%0A            yield datetime.fromtimestamp(%0A                random.randint(start, stop)%0A            
 )%0A%0A%0A
@@ -1193,32 +1193,36 @@
 dt in super(Date
+Time
 , self).generate

Add past/future arguments to date generators