Skip to content

Commit c0d79bc

Browse files
author
Chang She
committed
BUG: more fixedoffset occurrences #1928
1 parent 7bc8f44 commit c0d79bc

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

pandas/io/pytables.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,10 @@ def _write_index(self, group, key, index):
579579
node._v_attrs.freq = index.freq
580580

581581
if hasattr(index, 'tz') and index.tz is not None:
582-
node._v_attrs.tz = lib.get_timezone(index.tz)
582+
zone = lib.get_timezone(index.tz)
583+
if zone is None:
584+
zone = lib.tot_seconds(index.tz.utcoffset())
585+
node._v_attrs.tz = zone
583586

584587
def _read_index(self, group, key):
585588
variety = getattr(group._v_attrs, '%s_variety' % key)

pandas/io/tests/test_pytables.py

+13
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,19 @@ def test_timezones(self):
380380
store.close()
381381
os.remove(self.scratchpath)
382382

383+
def test_fixed_offset_tz(self):
384+
rng = date_range('1/1/2000 00:00:00-07:00', '1/30/2000 00:00:00-07:00')
385+
frame = DataFrame(np.random.randn(len(rng), 4), index=rng)
386+
try:
387+
store = HDFStore(self.scratchpath)
388+
store['frame'] = frame
389+
recons = store['frame']
390+
self.assert_(recons.index.equals(rng))
391+
self.assertEquals(rng.tz, recons.index.tz)
392+
finally:
393+
store.close()
394+
os.remove(self.scratchpath)
395+
383396
def test_store_hierarchical(self):
384397
index = MultiIndex(levels=[['foo', 'bar', 'baz', 'qux'],
385398
['one', 'two', 'three']],

pandas/src/datetime.pyx

+3
Original file line numberDiff line numberDiff line change
@@ -1031,6 +1031,9 @@ cdef double total_seconds(object td): # Python 2.6 compat
10311031
return ((td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) //
10321032
10**6)
10331033

1034+
def tot_seconds(td):
1035+
return total_seconds(td)
1036+
10341037
cpdef ndarray _unbox_utcoffsets(object transinfo):
10351038
cdef:
10361039
Py_ssize_t i, sz

pandas/tseries/tests/test_timezones.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def tzname(self, dt):
6060
def dst(self, dt):
6161
return timedelta(0)
6262

63-
fixed_off = FixedOffset(-4200, '-07:00')
63+
fixed_off = FixedOffset(-420, '-07:00')
6464

6565
class TestTimeZoneSupport(unittest.TestCase):
6666

@@ -153,15 +153,18 @@ def test_create_with_tz(self):
153153
self.assertEquals(utc_stamp.hour, 5)
154154

155155
def test_create_with_fixed_tz(self):
156-
off = FixedOffset(4200, '+07:00')
157-
start = Timestamp('3/11/2012 05:00', tz=off)
158-
end = Timestamp('6/11/2012 05:00', tz=off)
156+
off = FixedOffset(420, '+07:00')
157+
start = datetime(2012, 3, 11, 5, 0, 0, tzinfo=off)
158+
end = datetime(2012, 6, 11, 5, 0, 0, tzinfo=off)
159159
rng = date_range(start=start, end=end)
160160
self.assertEqual(off, rng.tz)
161161

162162
rng2 = date_range(start, periods=len(rng), tz=off)
163163
self.assert_(rng.equals(rng2))
164164

165+
rng3 = date_range('3/11/2012 05:00:00+07:00', '6/11/2012 05:00:00+07:00')
166+
self.assert_((rng.values == rng3.values).all())
167+
165168
def test_date_range_localize(self):
166169
rng = date_range('3/11/2012 03:00', periods=15, freq='H', tz='US/Eastern')
167170
rng2 = DatetimeIndex(['3/11/2012 03:00', '3/11/2012 04:00'],

pandas/tseries/tools.py

+3
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ def _maybe_get_tz(tz):
3939
if isinstance(tz, (str, unicode)):
4040
import pytz
4141
tz = pytz.timezone(tz)
42+
if com.is_integer(tz):
43+
import pytz
44+
tz = pytz.FixedOffset(tz / 60)
4245
return tz
4346

4447

0 commit comments

Comments
 (0)