def test_date_functions__utc_only(self): if self.database.server_timezone != pytz.utc: raise unittest.SkipTest( 'This test must run with UTC as the server timezone') d = date(2018, 12, 31) dt = datetime(2018, 12, 31, 11, 22, 33) athens_tz = pytz.timezone('Europe/Athens') self._test_func(F.toHour(dt), 11) self._test_func(F.toStartOfDay(dt), datetime(2018, 12, 31, 0, 0, 0, tzinfo=pytz.utc)) self._test_func(F.toTime(dt, pytz.utc), datetime(1970, 1, 2, 11, 22, 33, tzinfo=pytz.utc)) self._test_func(F.toTime(dt, 'Europe/Athens'), athens_tz.localize(datetime(1970, 1, 2, 13, 22, 33))) self._test_func(F.toTime(dt, athens_tz), athens_tz.localize(datetime(1970, 1, 2, 13, 22, 33))) self._test_func(F.toTimeZone(dt, 'Europe/Athens'), athens_tz.localize(datetime(2018, 12, 31, 13, 22, 33))) self._test_func(F.now(), datetime.utcnow().replace(tzinfo=pytz.utc, microsecond=0) ) # FIXME this may fail if the timing is just right self._test_func(F.today(), datetime.utcnow().date()) self._test_func(F.yesterday(), datetime.utcnow().date() - timedelta(days=1)) self._test_func(F.toYYYYMMDDhhmmss(dt), 20181231112233) self._test_func(F.formatDateTime(dt, '%D %T'), '12/31/18 11:22:33') self._test_func(F.addHours(d, 7), datetime(2018, 12, 31, 7, 0, 0, tzinfo=pytz.utc)) self._test_func(F.addMinutes(d, 7), datetime(2018, 12, 31, 0, 7, 0, tzinfo=pytz.utc))
def test_date_functions(self): d = date(2018, 12, 31) dt = datetime(2018, 12, 31, 11, 22, 33) self._test_func(F.toYear(d), 2018) self._test_func(F.toYear(dt), 2018) self._test_func(F.toISOYear(dt, 'Europe/Athens'), 2019) # 2018-12-31 is ISO year 2019, week 1, day 1 self._test_func(F.toQuarter(d), 4) self._test_func(F.toQuarter(dt), 4) self._test_func(F.toMonth(d), 12) self._test_func(F.toMonth(dt), 12) self._test_func(F.toWeek(d), 52) self._test_func(F.toWeek(dt), 52) self._test_func(F.toISOWeek(d), 1) # 2018-12-31 is ISO year 2019, week 1, day 1 self._test_func(F.toISOWeek(dt), 1) self._test_func(F.toDayOfYear(d), 365) self._test_func(F.toDayOfYear(dt), 365) self._test_func(F.toDayOfMonth(d), 31) self._test_func(F.toDayOfMonth(dt), 31) self._test_func(F.toDayOfWeek(d), 1) self._test_func(F.toDayOfWeek(dt), 1) self._test_func(F.toMinute(dt), 22) self._test_func(F.toSecond(dt), 33) self._test_func(F.toMonday(d), d) self._test_func(F.toMonday(dt), d) self._test_func(F.toStartOfMonth(d), date(2018, 12, 1)) self._test_func(F.toStartOfMonth(dt), date(2018, 12, 1)) self._test_func(F.toStartOfQuarter(d), date(2018, 10, 1)) self._test_func(F.toStartOfQuarter(dt), date(2018, 10, 1)) self._test_func(F.toStartOfYear(d), date(2018, 1, 1)) self._test_func(F.toStartOfYear(dt), date(2018, 1, 1)) self._test_func(F.toStartOfMinute(dt), datetime(2018, 12, 31, 11, 22, 0, tzinfo=pytz.utc)) self._test_func(F.toStartOfFiveMinute(dt), datetime(2018, 12, 31, 11, 20, 0, tzinfo=pytz.utc)) self._test_func(F.toStartOfFifteenMinutes(dt), datetime(2018, 12, 31, 11, 15, 0, tzinfo=pytz.utc)) self._test_func(F.toStartOfHour(dt), datetime(2018, 12, 31, 11, 0, 0, tzinfo=pytz.utc)) self._test_func(F.toStartOfISOYear(dt), date(2018, 12, 31)) self._test_func(F.toStartOfTenMinutes(dt), datetime(2018, 12, 31, 11, 20, 0, tzinfo=pytz.utc)) self._test_func(F.toStartOfWeek(dt), date(2018, 12, 30)) self._test_func(F.toTime(dt), datetime(1970, 1, 2, 11, 22, 33, tzinfo=pytz.utc)) self._test_func(F.toUnixTimestamp(dt, 'UTC'), int(dt.replace(tzinfo=pytz.utc).timestamp())) self._test_func(F.toYYYYMM(d), 201812) self._test_func(F.toYYYYMM(dt), 201812) self._test_func(F.toYYYYMM(dt, 'Europe/Athens'), 201812) self._test_func(F.toYYYYMMDD(d), 20181231) self._test_func(F.toYYYYMMDD(dt), 20181231) self._test_func(F.toYYYYMMDD(dt, 'Europe/Athens'), 20181231) self._test_func(F.toYYYYMMDDhhmmss(d), 20181231000000) self._test_func(F.toYYYYMMDDhhmmss(dt, 'Europe/Athens'), 20181231132233) self._test_func(F.toRelativeYearNum(dt), 2018) self._test_func(F.toRelativeYearNum(dt, 'Europe/Athens'), 2018) self._test_func(F.toRelativeMonthNum(dt), 2018 * 12 + 12) self._test_func(F.toRelativeMonthNum(dt, 'Europe/Athens'), 2018 * 12 + 12) self._test_func(F.toRelativeWeekNum(dt), 2557) self._test_func(F.toRelativeWeekNum(dt, 'Europe/Athens'), 2557) self._test_func(F.toRelativeDayNum(dt), 17896) self._test_func(F.toRelativeDayNum(dt, 'Europe/Athens'), 17896) self._test_func(F.toRelativeHourNum(dt), 429515) self._test_func(F.toRelativeHourNum(dt, 'Europe/Athens'), 429515) self._test_func(F.toRelativeMinuteNum(dt), 25770922) self._test_func(F.toRelativeMinuteNum(dt, 'Europe/Athens'), 25770922) self._test_func(F.toRelativeSecondNum(dt), 1546255353) self._test_func(F.toRelativeSecondNum(dt, 'Europe/Athens'), 1546255353) self._test_func(F.timeSlot(dt), datetime(2018, 12, 31, 11, 0, 0, tzinfo=pytz.utc)) self._test_func(F.timeSlots(dt, 300), [datetime(2018, 12, 31, 11, 0, 0, tzinfo=pytz.utc)]) self._test_func(F.formatDateTime(dt, '%D %T', 'Europe/Athens'), '12/31/18 13:22:33') self._test_func(F.addDays(d, 7), date(2019, 1, 7)) self._test_func(F.addDays(dt, 7, 'Europe/Athens')) self._test_func(F.addHours(dt, 7, 'Europe/Athens')) self._test_func(F.addMinutes(dt, 7, 'Europe/Athens')) self._test_func(F.addMonths(d, 7), date(2019, 7, 31)) self._test_func(F.addMonths(dt, 7, 'Europe/Athens')) self._test_func(F.addQuarters(d, 7)) self._test_func(F.addQuarters(dt, 7, 'Europe/Athens')) self._test_func(F.addSeconds(d, 7)) self._test_func(F.addSeconds(dt, 7, 'Europe/Athens')) self._test_func(F.addWeeks(d, 7)) self._test_func(F.addWeeks(dt, 7, 'Europe/Athens')) self._test_func(F.addYears(d, 7)) self._test_func(F.addYears(dt, 7, 'Europe/Athens')) self._test_func(F.subtractDays(d, 3)) self._test_func(F.subtractDays(dt, 3, 'Europe/Athens')) self._test_func(F.subtractHours(d, 3)) self._test_func(F.subtractHours(dt, 3, 'Europe/Athens')) self._test_func(F.subtractMinutes(d, 3)) self._test_func(F.subtractMinutes(dt, 3, 'Europe/Athens')) self._test_func(F.subtractMonths(d, 3)) self._test_func(F.subtractMonths(dt, 3, 'Europe/Athens')) self._test_func(F.subtractQuarters(d, 3)) self._test_func(F.subtractQuarters(dt, 3, 'Europe/Athens')) self._test_func(F.subtractSeconds(d, 3)) self._test_func(F.subtractSeconds(dt, 3, 'Europe/Athens')) self._test_func(F.subtractWeeks(d, 3)) self._test_func(F.subtractWeeks(dt, 3, 'Europe/Athens')) self._test_func(F.subtractYears(d, 3)) self._test_func(F.subtractYears(dt, 3, 'Europe/Athens')) self._test_func(F.now() + F.toIntervalSecond(3) + F.toIntervalMinute(3) + F.toIntervalHour(3) + F.toIntervalDay(3)) self._test_func(F.now() + F.toIntervalWeek(3) + F.toIntervalMonth(3) + F.toIntervalQuarter(3) + F.toIntervalYear(3)) self._test_func(F.now() + F.toIntervalSecond(3000) - F.toIntervalDay(3000) == F.now() + timedelta(seconds=3000, days=-3000))