def test_nanosecond_timestamp(self): # GH 7610 expected = 1293840000000000005 t = Timestamp('2011-01-01') + offsets.Nano(5) self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000005')") self.assertEqual(t.value, expected) self.assertEqual(t.nanosecond, 5) t = Timestamp(t) self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000005')") self.assertEqual(t.value, expected) self.assertEqual(t.nanosecond, 5) t = Timestamp(np_datetime64_compat('2011-01-01 00:00:00.000000005Z')) self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000005')") self.assertEqual(t.value, expected) self.assertEqual(t.nanosecond, 5) expected = 1293840000000000010 t = t + offsets.Nano(5) self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000010')") self.assertEqual(t.value, expected) self.assertEqual(t.nanosecond, 10) t = Timestamp(t) self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000010')") self.assertEqual(t.value, expected) self.assertEqual(t.nanosecond, 10) t = Timestamp(np_datetime64_compat('2011-01-01 00:00:00.000000010Z')) self.assertEqual(repr(t), "Timestamp('2011-01-01 00:00:00.000000010')") self.assertEqual(t.value, expected) self.assertEqual(t.nanosecond, 10)
def test_repr(self): date = '2014-03-07' tz = 'US/Eastern' freq = 'M' date_only = Timestamp(date) self.assertIn(date, repr(date_only)) self.assertNotIn(tz, repr(date_only)) self.assertNotIn(freq, repr(date_only)) self.assertEqual(date_only, eval(repr(date_only))) date_tz = Timestamp(date, tz=tz) self.assertIn(date, repr(date_tz)) self.assertIn(tz, repr(date_tz)) self.assertNotIn(freq, repr(date_tz)) self.assertEqual(date_tz, eval(repr(date_tz))) date_freq = Timestamp(date, offset=freq) self.assertIn(date, repr(date_freq)) self.assertNotIn(tz, repr(date_freq)) self.assertIn(freq, repr(date_freq)) self.assertEqual(date_freq, eval(repr(date_freq))) date_tz_freq = Timestamp(date, tz=tz, offset=freq) self.assertIn(date, repr(date_tz_freq)) self.assertIn(tz, repr(date_tz_freq)) self.assertIn(freq, repr(date_tz_freq)) self.assertEqual(date_tz_freq, eval(repr(date_tz_freq))) # this can cause the tz field to be populated, but it's redundant to information in the datestring date_with_utc_offset = Timestamp('2014-03-13 00:00:00-0400', tz=None) self.assertIn('2014-03-13 00:00:00-0400', repr(date_with_utc_offset)) self.assertNotIn('tzoffset', repr(date_with_utc_offset)) self.assertEqual(date_with_utc_offset, eval(repr(date_with_utc_offset)))
def test_asm8(self): np.random.seed(7960929) ns = [ Timestamp.min.value, Timestamp.max.value, 1000, ] for n in ns: self.assertEqual(Timestamp(n).asm8, np.datetime64(n, 'ns'), n) self.assertEqual(Timestamp('nat').asm8, np.datetime64('nat', 'ns'))
def test_repr(self): dates = [ '2014-03-07', '2014-01-01 09:00', '2014-01-01 00:00:00.000000001' ] timezones = ['UTC', 'Asia/Tokyo', 'US/Eastern', 'dateutil/US/Pacific'] if _np_version_under1p7: freqs = ['D', 'M', 'S'] else: freqs = ['D', 'M', 'S', 'N'] for date in dates: for tz in timezones: for freq in freqs: # avoid to match with timezone name freq_repr = "'{0}'".format(freq) if tz.startswith('dateutil'): tz_repr = tz.replace('dateutil', '') else: tz_repr = tz date_only = Timestamp(date) self.assertIn(date, repr(date_only)) self.assertNotIn(tz_repr, repr(date_only)) self.assertNotIn(freq_repr, repr(date_only)) self.assertEqual(date_only, eval(repr(date_only))) date_tz = Timestamp(date, tz=tz) self.assertIn(date, repr(date_tz)) self.assertIn(tz_repr, repr(date_tz)) self.assertNotIn(freq_repr, repr(date_tz)) self.assertEqual(date_tz, eval(repr(date_tz))) date_freq = Timestamp(date, offset=freq) self.assertIn(date, repr(date_freq)) self.assertNotIn(tz_repr, repr(date_freq)) self.assertIn(freq_repr, repr(date_freq)) self.assertEqual(date_freq, eval(repr(date_freq))) date_tz_freq = Timestamp(date, tz=tz, offset=freq) self.assertIn(date, repr(date_tz_freq)) self.assertIn(tz_repr, repr(date_tz_freq)) self.assertIn(freq_repr, repr(date_tz_freq)) self.assertEqual(date_tz_freq, eval(repr(date_tz_freq))) # this can cause the tz field to be populated, but it's redundant to information in the datestring tm._skip_if_no_pytz() import pytz date_with_utc_offset = Timestamp('2014-03-13 00:00:00-0400', tz=None) self.assertIn('2014-03-13 00:00:00-0400', repr(date_with_utc_offset)) self.assertNotIn('tzoffset', repr(date_with_utc_offset)) self.assertIn('pytz.FixedOffset(-240)', repr(date_with_utc_offset)) expr = repr(date_with_utc_offset).replace("'pytz.FixedOffset(-240)'", 'pytz.FixedOffset(-240)') self.assertEqual(date_with_utc_offset, eval(expr))
def test_shift_months(self): s = DatetimeIndex([Timestamp('2000-01-05 00:15:00'), Timestamp( '2000-01-31 00:23:00'), Timestamp('2000-01-01'), Timestamp( '2000-02-29'), Timestamp('2000-12-31')]) for years in [-1, 0, 1]: for months in [-2, 0, 2]: actual = DatetimeIndex(tslib.shift_months(s.asi8, years * 12 + months)) expected = DatetimeIndex([x + offsets.DateOffset( years=years, months=months) for x in s]) tm.assert_index_equal(actual, expected)
def test_tz_convert_roundtrip(self): for tz in ['UTC', 'Asia/Tokyo', 'US/Eastern', 'dateutil/US/Pacific']: for t in ['2014-02-01 09:00', '2014-07-08 09:00', '2014-11-01 17:00', '2014-11-05 00:00']: ts = Timestamp(t, tz='UTC') converted = ts.tz_convert(tz) reset = converted.tz_convert(None) self.assertEqual(reset, Timestamp(t)) self.assertTrue(reset.tzinfo is None) self.assertEqual(reset, converted.tz_convert('UTC').tz_localize(None))
def test_to_datetime_bijective(self): # Ensure that converting to datetime and back only loses precision # by going from nanoseconds to microseconds. exp_warning = None if Timestamp.max.nanosecond == 0 else UserWarning with tm.assert_produces_warning(exp_warning, check_stacklevel=False): self.assertEqual( Timestamp(Timestamp.max.to_pydatetime()).value / 1000, Timestamp.max.value / 1000) exp_warning = None if Timestamp.min.nanosecond == 0 else UserWarning with tm.assert_produces_warning(exp_warning, check_stacklevel=False): self.assertEqual( Timestamp(Timestamp.min.to_pydatetime()).value / 1000, Timestamp.min.value / 1000)
def test_constructor(self): base_str = '2014-07-01 09:00' base_dt = datetime.datetime(2014, 7, 1, 9) base_expected = 1404205200000000000 # confirm base representation is correct import calendar self.assertEqual( calendar.timegm(base_dt.timetuple()) * 1000000000, base_expected) tests = [ (base_str, base_dt, base_expected), ('2014-07-01 10:00', datetime.datetime(2014, 7, 1, 10), base_expected + 3600 * 1000000000), ('2014-07-01 09:00:00.000008000', datetime.datetime(2014, 7, 1, 9, 0, 0, 8), base_expected + 8000), ('2014-07-01 09:00:00.000000005', Timestamp('2014-07-01 09:00:00.000000005'), base_expected + 5) ] tm._skip_if_no_pytz() tm._skip_if_no_dateutil() import pytz import dateutil timezones = [(None, 0), ('UTC', 0), (pytz.utc, 0), ('Asia/Tokyo', 9), ('US/Eastern', -4), ('dateutil/US/Pacific', -7), (pytz.FixedOffset(-180), -3), (dateutil.tz.tzoffset(None, 18000), 5)] for date_str, date, expected in tests: for result in [Timestamp(date_str), Timestamp(date)]: # only with timestring self.assertEqual(result.value, expected) self.assertEqual(tslib.pydt_to_i8(result), expected) # re-creation shouldn't affect to internal value result = Timestamp(result) self.assertEqual(result.value, expected) self.assertEqual(tslib.pydt_to_i8(result), expected) # with timezone for tz, offset in timezones: for result in [ Timestamp(date_str, tz=tz), Timestamp(date, tz=tz) ]: expected_tz = expected - offset * 3600 * 1000000000 self.assertEqual(result.value, expected_tz) self.assertEqual(tslib.pydt_to_i8(result), expected_tz) # should preserve tz result = Timestamp(result) self.assertEqual(result.value, expected_tz) self.assertEqual(tslib.pydt_to_i8(result), expected_tz) # should convert to UTC result = Timestamp(result, tz='UTC') expected_utc = expected - offset * 3600 * 1000000000 self.assertEqual(result.value, expected_utc) self.assertEqual(tslib.pydt_to_i8(result), expected_utc)
def test_tz_localize_roundtrip(self): for tz in ['UTC', 'Asia/Tokyo', 'US/Eastern', 'dateutil/US/Pacific']: for t in ['2014-02-01 09:00', '2014-07-08 09:00', '2014-11-01 17:00', '2014-11-05 00:00']: ts = Timestamp(t) localized = ts.tz_localize(tz) self.assertEqual(localized, Timestamp(t, tz=tz)) with tm.assertRaises(TypeError): localized.tz_localize(tz) reset = localized.tz_localize(None) self.assertEqual(reset, ts) self.assertTrue(reset.tzinfo is None)
def test_now(self): # #9000 ts_from_string = Timestamp('now') ts_from_method = Timestamp.now() ts_datetime = datetime.datetime.now() ts_from_string_tz = Timestamp('now', tz='US/Eastern') ts_from_method_tz = Timestamp.now(tz='US/Eastern') # Check that the delta between the times is less than 1s (arbitrarily small) delta = Timedelta(seconds=1) self.assertTrue((ts_from_method - ts_from_string) < delta) self.assertTrue((ts_from_method_tz - ts_from_string_tz) < delta) self.assertTrue( (ts_from_string_tz.tz_localize(None) - ts_from_string) < delta)
def test_round(self): stamp = Timestamp('2000-01-05 05:09:15.13') def _check_round(freq, expected): result = stamp.round(freq=freq) self.assertEqual(result, expected) for freq, expected in [('D', Timestamp('2000-01-05 00:00:00')), ('H', Timestamp('2000-01-05 05:00:00')), ('S', Timestamp('2000-01-05 05:09:15'))]: _check_round(freq, expected) msg = pd.tseries.frequencies._INVALID_FREQ_ERROR with self.assertRaisesRegexp(ValueError, msg): stamp.round('foo')
def test_bounds_with_different_units(self): out_of_bounds_dates = ( '1677-09-21', '2262-04-12', ) time_units = ('D', 'h', 'm', 's', 'ms', 'us') for date_string in out_of_bounds_dates: for unit in time_units: self.assertRaises( ValueError, Timestamp, np.datetime64(date_string, dtype='M8[%s]' % unit) ) in_bounds_dates = ( '1677-09-23', '2262-04-11', ) for date_string in in_bounds_dates: for unit in time_units: Timestamp( np.datetime64(date_string, dtype='M8[%s]' % unit) )
def test_loc_getitem_label(self): # label self.check_result('label', 'loc', 'c', 'ix', 'c', typs=['labels'], axes=0) self.check_result('label', 'loc', 'null', 'ix', 'null', typs=['mixed'], axes=0) self.check_result('label', 'loc', 8, 'ix', 8, typs=['mixed'], axes=0) self.check_result('label', 'loc', Timestamp('20130102'), 'ix', 1, typs=['ts'], axes=0) self.check_result('label', 'loc', 'c', 'ix', 'c', typs=['empty'], fails=KeyError)
def test_nat_arithmetic(self): # GH 6873 nat = tslib.NaT t = Timestamp('2014-01-01') dt = datetime.datetime(2014, 1, 1) delta = datetime.timedelta(3600) td = Timedelta('5s') i = 2 f = 1.5 for (left, right) in [(nat, i), (nat, f), (nat, np.nan)]: self.assertTrue((left / right) is nat) self.assertTrue((left * right) is nat) self.assertTrue((right * left) is nat) with tm.assertRaises(TypeError): right / left # Timestamp / datetime for (left, right) in [(nat, nat), (nat, t), (nat, dt)]: # NaT __add__ or __sub__ Timestamp-like (or inverse) returns NaT self.assertTrue((right + left) is nat) self.assertTrue((left + right) is nat) self.assertTrue((left - right) is nat) self.assertTrue((right - left) is nat) # timedelta-like # offsets are tested in test_offsets.py for (left, right) in [(nat, delta), (nat, td)]: # NaT + timedelta-like returns NaT self.assertTrue((right + left) is nat) self.assertTrue((left + right) is nat) self.assertTrue((right - left) is nat) self.assertTrue((left - right) is nat)
def test_nat_arithmetic(self): # GH 6873 nat = tslib.NaT t = Timestamp('2014-01-01') dt = datetime.datetime(2014, 1, 1) delta = datetime.timedelta(3600) # Timestamp / datetime for (left, right) in [(nat, nat), (nat, t), (dt, nat)]: # NaT + Timestamp-like should raise TypeError with tm.assertRaises(TypeError): left + right with tm.assertRaises(TypeError): right + left # NaT - Timestamp-like (or inverse) returns NaT self.assertTrue((left - right) is tslib.NaT) self.assertTrue((right - left) is tslib.NaT) # timedelta-like # offsets are tested in test_offsets.py for (left, right) in [(nat, delta)]: # NaT + timedelta-like returns NaT self.assertTrue((left + right) is tslib.NaT) # timedelta-like + NaT should raise TypeError with tm.assertRaises(TypeError): right + left self.assertTrue((left - right) is tslib.NaT) with tm.assertRaises(TypeError): right - left
def test_barely_oob_dts(self): one_us = np.timedelta64(1).astype('timedelta64[us]') # By definition we can't go out of bounds in [ns], so we # convert the datetime64s to [us] so we can go out of bounds min_ts_us = np.datetime64(Timestamp.min).astype('M8[us]') max_ts_us = np.datetime64(Timestamp.max).astype('M8[us]') # No error for the min/max datetimes Timestamp(min_ts_us) Timestamp(max_ts_us) # One us less than the minimum is an error self.assertRaises(ValueError, Timestamp, min_ts_us - one_us) # One us more than the maximum is an error self.assertRaises(ValueError, Timestamp, max_ts_us + one_us)
def test_tz(self): t = '2014-02-01 09:00' ts = Timestamp(t) local = ts.tz_localize('Asia/Tokyo') self.assertEqual(local.hour, 9) self.assertEqual(local, Timestamp(t, tz='Asia/Tokyo')) conv = local.tz_convert('US/Eastern') self.assertEqual(conv, Timestamp('2014-01-31 19:00', tz='US/Eastern')) self.assertEqual(conv.hour, 19) # preserves nanosecond ts = Timestamp(t) + offsets.Nano(5) local = ts.tz_localize('Asia/Tokyo') self.assertEqual(local.hour, 9) self.assertEqual(local.nanosecond, 5) conv = local.tz_convert('US/Eastern') self.assertEqual(conv.nanosecond, 5) self.assertEqual(conv.hour, 19)
def test_today(self): ts_from_string = Timestamp('today') ts_from_method = Timestamp.today() ts_datetime = datetime.datetime.today() ts_from_string_tz = Timestamp('today', tz='US/Eastern') ts_from_method_tz = Timestamp.today(tz='US/Eastern') # Check that the delta between the times is less than 1s (arbitrarily small) delta = Timedelta(seconds=1) self.assertTrue(abs(ts_from_method - ts_from_string) < delta) self.assertTrue(abs(ts_datetime - ts_from_method) < delta) self.assertTrue(abs(ts_from_method_tz - ts_from_string_tz) < delta) self.assertTrue( abs( ts_from_string_tz.tz_localize(None) - ts_from_method_tz.tz_localize(None)) < delta)
def test_nanosecond_string_parsing(self): ts = Timestamp('2013-05-01 07:15:45.123456789') # GH 7878 expected_repr = '2013-05-01 07:15:45.123456789' expected_value = 1367392545123456789 self.assertEqual(ts.value, expected_value) self.assertIn(expected_repr, repr(ts)) ts = Timestamp('2013-05-01 07:15:45.123456789+09:00', tz='Asia/Tokyo') self.assertEqual(ts.value, expected_value - 9 * 3600 * 1000000000) self.assertIn(expected_repr, repr(ts)) ts = Timestamp('2013-05-01 07:15:45.123456789', tz='UTC') self.assertEqual(ts.value, expected_value) self.assertIn(expected_repr, repr(ts)) ts = Timestamp('2013-05-01 07:15:45.123456789', tz='US/Eastern') self.assertEqual(ts.value, expected_value + 4 * 3600 * 1000000000) self.assertIn(expected_repr, repr(ts))
def test_tz_localize_ambiguous(self): ts = Timestamp('2014-11-02 01:00') ts_dst = ts.tz_localize('US/Eastern', ambiguous=True) ts_no_dst = ts.tz_localize('US/Eastern', ambiguous=False) rng = date_range('2014-11-02', periods=3, freq='H', tz='US/Eastern') self.assertEqual(rng[1], ts_dst) self.assertEqual(rng[2], ts_no_dst) self.assertRaises(ValueError, ts.tz_localize, 'US/Eastern', ambiguous='infer') # GH 8025 with tm.assertRaisesRegexp(TypeError, 'Cannot localize tz-aware Timestamp, use ' 'tz_convert for conversions'): Timestamp('2011-01-01' ,tz='US/Eastern').tz_localize('Asia/Tokyo') with tm.assertRaisesRegexp(TypeError, 'Cannot convert tz-naive Timestamp, use ' 'tz_localize to localize'): Timestamp('2011-01-01').tz_convert('Asia/Tokyo')
def test_tz(self): t = '2014-02-01 09:00' ts = Timestamp(t) local = ts.tz_localize('Asia/Tokyo') self.assertEqual(local.hour, 9) self.assertEqual(local, Timestamp(t, tz='Asia/Tokyo')) conv = local.tz_convert('US/Eastern') self.assertEqual(conv, Timestamp('2014-01-31 19:00', tz='US/Eastern')) self.assertEqual(conv.hour, 19) # preserves nanosecond ts = Timestamp(t) + offsets.Nano(5) local = ts.tz_localize('Asia/Tokyo') self.assertEqual(local.hour, 9) self.assertEqual(local.nanosecond, 5) conv = local.tz_convert('US/Eastern') self.assertEqual(conv.nanosecond, 5) self.assertEqual(conv.hour, 19) # GH 8025 with tm.assertRaisesRegexp( TypeError, 'Cannot localize tz-aware Timestamp, use ' 'tz_convert for conversions'): Timestamp('2011-01-01', tz='US/Eastern').tz_localize('Asia/Tokyo') with tm.assertRaisesRegexp( TypeError, 'Cannot convert tz-naive Timestamp, use ' 'tz_localize to localize'): Timestamp('2011-01-01').tz_convert('Asia/Tokyo')
def test_loc_getitem_label_list(self): # list of labels self.check_result('list lbl', 'loc', [0,2,4], 'ix', [0,2,4], typs = ['ints'], axes=0) self.check_result('list lbl', 'loc', [3,6,9], 'ix', [3,6,9], typs = ['ints'], axes=1) self.check_result('list lbl', 'loc', [4,8,12], 'ix', [4,8,12], typs = ['ints'], axes=2) self.check_result('list lbl', 'loc', ['a','b','d'], 'ix', ['a','b','d'], typs = ['labels'], axes=0) self.check_result('list lbl', 'loc', ['A','B','C'], 'ix', ['A','B','C'], typs = ['labels'], axes=1) self.check_result('list lbl', 'loc', ['Z','Y','W'], 'ix', ['Z','Y','W'], typs = ['labels'], axes=2) self.check_result('list lbl', 'loc', [2,8,'null'], 'ix', [2,8,'null'], typs = ['mixed'], axes=0) self.check_result('list lbl', 'loc', [Timestamp('20130102'),Timestamp('20130103')], 'ix', [Timestamp('20130102'),Timestamp('20130103')], typs = ['ts'], axes=0) # fails self.check_result('list lbl', 'loc', [0,1,2], 'indexer', [0,1,2], typs = ['empty'], fails = KeyError) self.check_result('list lbl', 'loc', [0,2,3], 'ix', [0,2,3], typs = ['ints'], axes=0, fails = KeyError) self.check_result('list lbl', 'loc', [3,6,7], 'ix', [3,6,9], typs = ['ints'], axes=1, fails = KeyError) self.check_result('list lbl', 'loc', [4,8,10], 'ix', [4,8,12], typs = ['ints'], axes=2, fails = KeyError) # array like self.check_result('array like', 'loc', Series(index=[0,2,4]).index, 'ix', [0,2,4], typs = ['ints'], axes=0) self.check_result('array like', 'loc', Series(index=[3,6,9]).index, 'ix', [3,6,9], typs = ['ints'], axes=1) self.check_result('array like', 'loc', Series(index=[4,8,12]).index, 'ix', [4,8,12], typs = ['ints'], axes=2)
def test_conversion(self): # GH 9255 ts = Timestamp('2000-01-01') result = ts.to_pydatetime() expected = datetime.datetime(2000, 1, 1) self.assertEqual(result, expected) self.assertEqual(type(result), type(expected)) result = ts.to_datetime64() expected = np.datetime64(ts.value, 'ns') self.assertEqual(result, expected) self.assertEqual(type(result), type(expected)) self.assertEqual(result.dtype, expected.dtype)
def test_nat_fields(self): # GH 10050 ts = Timestamp('NaT') self.assertTrue(np.isnan(ts.year)) self.assertTrue(np.isnan(ts.month)) self.assertTrue(np.isnan(ts.day)) self.assertTrue(np.isnan(ts.hour)) self.assertTrue(np.isnan(ts.minute)) self.assertTrue(np.isnan(ts.second)) self.assertTrue(np.isnan(ts.microsecond)) self.assertTrue(np.isnan(ts.nanosecond)) self.assertTrue(np.isnan(ts.dayofweek)) self.assertTrue(np.isnan(ts.quarter)) self.assertTrue(np.isnan(ts.dayofyear)) self.assertTrue(np.isnan(ts.week)) self.assertTrue(np.isnan(ts.daysinmonth)) self.assertTrue(np.isnan(ts.days_in_month))
def test_parsers_timestring(self): tm._skip_if_no_dateutil() from dateutil.parser import parse # must be the same as dateutil result cases = {'10:15': (parse('10:15'), datetime.datetime(1, 1, 1, 10, 15)), '9:05': (parse('9:05'), datetime.datetime(1, 1, 1, 9, 5))} for date_str, (exp_now, exp_def) in compat.iteritems(cases): result1, _, _ = tools.parse_time_string(date_str) result2 = to_datetime(date_str) result3 = to_datetime([date_str]) result4 = Timestamp(date_str) result5 = DatetimeIndex([date_str])[0] # parse time string return time string based on default date # others are not, and can't be changed because it is used in # time series plot self.assertEqual(result1, exp_def) self.assertEqual(result2, exp_now) self.assertEqual(result3, exp_now) self.assertEqual(result4, exp_now) self.assertEqual(result5, exp_now)
def test_fields(self): def check(value, equal): # that we are int/long like self.assertTrue(isinstance(value, (int, compat.long))) self.assertEqual(value, equal) # GH 10050 ts = Timestamp('2015-05-10 09:06:03.000100001') check(ts.year, 2015) check(ts.month, 5) check(ts.day, 10) check(ts.hour, 9) check(ts.minute, 6) check(ts.second, 3) self.assertRaises(AttributeError, lambda: ts.millisecond) check(ts.microsecond, 100) check(ts.nanosecond, 1) check(ts.dayofweek, 6) check(ts.quarter, 2) check(ts.dayofyear, 130) check(ts.week, 19) check(ts.daysinmonth, 31) check(ts.daysinmonth, 31)
def test_constructor_with_stringoffset(self): # GH 7833 base_str = '2014-07-01 11:00:00+02:00' base_dt = datetime.datetime(2014, 7, 1, 9) base_expected = 1404205200000000000 # confirm base representation is correct import calendar self.assertEqual( calendar.timegm(base_dt.timetuple()) * 1000000000, base_expected) tests = [(base_str, base_expected), ('2014-07-01 12:00:00+02:00', base_expected + 3600 * 1000000000), ('2014-07-01 11:00:00.000008000+02:00', base_expected + 8000), ('2014-07-01 11:00:00.000000005+02:00', base_expected + 5)] tm._skip_if_no_pytz() tm._skip_if_no_dateutil() import pytz import dateutil timezones = [(None, 0), ('UTC', 0), (pytz.utc, 0), ('Asia/Tokyo', 9), ('US/Eastern', -4), ('dateutil/US/Pacific', -7), (pytz.FixedOffset(-180), -3), (dateutil.tz.tzoffset(None, 18000), 5)] for date_str, expected in tests: for result in [Timestamp(date_str)]: # only with timestring self.assertEqual(result.value, expected) self.assertEqual(tslib.pydt_to_i8(result), expected) # re-creation shouldn't affect to internal value result = Timestamp(result) self.assertEqual(result.value, expected) self.assertEqual(tslib.pydt_to_i8(result), expected) # with timezone for tz, offset in timezones: result = Timestamp(date_str, tz=tz) expected_tz = expected self.assertEqual(result.value, expected_tz) self.assertEqual(tslib.pydt_to_i8(result), expected_tz) # should preserve tz result = Timestamp(result) self.assertEqual(result.value, expected_tz) self.assertEqual(tslib.pydt_to_i8(result), expected_tz) # should convert to UTC result = Timestamp(result, tz='UTC') expected_utc = expected self.assertEqual(result.value, expected_utc) self.assertEqual(tslib.pydt_to_i8(result), expected_utc) # This should be 2013-11-01 05:00 in UTC # converted to Chicago tz result = Timestamp('2013-11-01 00:00:00-0500', tz='America/Chicago') self.assertEqual(result.value, Timestamp('2013-11-01 05:00').value) expected = "Timestamp('2013-11-01 00:00:00-0500', tz='America/Chicago')" # noqa self.assertEqual(repr(result), expected) self.assertEqual(result, eval(repr(result))) # This should be 2013-11-01 05:00 in UTC # converted to Tokyo tz (+09:00) result = Timestamp('2013-11-01 00:00:00-0500', tz='Asia/Tokyo') self.assertEqual(result.value, Timestamp('2013-11-01 05:00').value) expected = "Timestamp('2013-11-01 14:00:00+0900', tz='Asia/Tokyo')" self.assertEqual(repr(result), expected) self.assertEqual(result, eval(repr(result))) # GH11708 # This should be 2015-11-18 10:00 in UTC # converted to Asia/Katmandu result = Timestamp("2015-11-18 15:45:00+05:45", tz="Asia/Katmandu") self.assertEqual(result.value, Timestamp("2015-11-18 10:00").value) expected = "Timestamp('2015-11-18 15:45:00+0545', tz='Asia/Katmandu')" self.assertEqual(repr(result), expected) self.assertEqual(result, eval(repr(result))) # This should be 2015-11-18 10:00 in UTC # converted to Asia/Kolkata result = Timestamp("2015-11-18 15:30:00+05:30", tz="Asia/Kolkata") self.assertEqual(result.value, Timestamp("2015-11-18 10:00").value) expected = "Timestamp('2015-11-18 15:30:00+0530', tz='Asia/Kolkata')" self.assertEqual(repr(result), expected) self.assertEqual(result, eval(repr(result)))
def setUp(self): self.timestamp = Timestamp(datetime.datetime.utcnow())
def test_parsers(self): cases = { '2011-01-01': datetime.datetime(2011, 1, 1), '2Q2005': datetime.datetime(2005, 4, 1), '2Q05': datetime.datetime(2005, 4, 1), '2005Q1': datetime.datetime(2005, 1, 1), '05Q1': datetime.datetime(2005, 1, 1), '2011Q3': datetime.datetime(2011, 7, 1), '11Q3': datetime.datetime(2011, 7, 1), '3Q2011': datetime.datetime(2011, 7, 1), '3Q11': datetime.datetime(2011, 7, 1), # quarterly without space '2000Q4': datetime.datetime(2000, 10, 1), '00Q4': datetime.datetime(2000, 10, 1), '4Q2000': datetime.datetime(2000, 10, 1), '4Q00': datetime.datetime(2000, 10, 1), '2000q4': datetime.datetime(2000, 10, 1), '2000-Q4': datetime.datetime(2000, 10, 1), '00-Q4': datetime.datetime(2000, 10, 1), '4Q-2000': datetime.datetime(2000, 10, 1), '4Q-00': datetime.datetime(2000, 10, 1), '2000q4': datetime.datetime(2000, 10, 1), '00q4': datetime.datetime(2000, 10, 1), '2005': datetime.datetime(2005, 1, 1), '2005-11': datetime.datetime(2005, 11, 1), '2005 11': datetime.datetime(2005, 11, 1), '11-2005': datetime.datetime(2005, 11, 1), '11 2005': datetime.datetime(2005, 11, 1), '200511': datetime.datetime(2020, 5, 11), '20051109': datetime.datetime(2005, 11, 9), '20051109 10:15': datetime.datetime(2005, 11, 9, 10, 15), '20051109 08H': datetime.datetime(2005, 11, 9, 8, 0), '2005-11-09 10:15': datetime.datetime(2005, 11, 9, 10, 15), '2005-11-09 08H': datetime.datetime(2005, 11, 9, 8, 0), '2005/11/09 10:15': datetime.datetime(2005, 11, 9, 10, 15), '2005/11/09 08H': datetime.datetime(2005, 11, 9, 8, 0), "Thu Sep 25 10:36:28 2003": datetime.datetime(2003, 9, 25, 10, 36, 28), "Thu Sep 25 2003": datetime.datetime(2003, 9, 25), "Sep 25 2003": datetime.datetime(2003, 9, 25), "January 1 2014": datetime.datetime(2014, 1, 1), # GH 10537 '2014-06': datetime.datetime(2014, 6, 1), '06-2014': datetime.datetime(2014, 6, 1), '2014-6': datetime.datetime(2014, 6, 1), '6-2014': datetime.datetime(2014, 6, 1), } for date_str, expected in compat.iteritems(cases): result1, _, _ = tools.parse_time_string(date_str) result2 = to_datetime(date_str) result3 = to_datetime([date_str]) result4 = to_datetime(np.array([date_str], dtype=object)) result5 = Timestamp(date_str) result6 = DatetimeIndex([date_str])[0] result7 = date_range(date_str, freq='S', periods=1) self.assertEqual(result1, expected) self.assertEqual(result2, expected) self.assertEqual(result3, expected) self.assertEqual(result4, expected) self.assertEqual(result5, expected) self.assertEqual(result6, expected) self.assertEqual(result7, expected) # NaT result1, _, _ = tools.parse_time_string('NaT') result2 = to_datetime('NaT') result3 = Timestamp('NaT') result4 = DatetimeIndex(['NaT'])[0] self.assertTrue(result1 is tslib.NaT) self.assertTrue(result1 is tslib.NaT) self.assertTrue(result1 is tslib.NaT) self.assertTrue(result1 is tslib.NaT)
def test_utc_z_designator(self): self.assertEqual(get_timezone(Timestamp('2014-11-02 01:00Z').tzinfo), 'UTC')