我创建了以下测试用例,以了解DateTime与Pandas Timestamp之间的转换,以及使用Python 3.6
返回DateTime,使用和不使用TimeZone信息from unittest import TestCase
import datetime
from datetime import timezone
from pytz import timezone
import time
import pandas as pd
def test_date_with_timestamp_method(self):
hkzone = timezone('Hongkong')
dt_with_tz = datetime.datetime(2017, 9, 24, tzinfo=hkzone)
dt_without_tz = datetime.datetime(2017, 9, 24)
uts_with = dt_with_tz.timestamp()
uts_without = dt_without_tz.timestamp()
self.assertNotEqual(uts_without, uts_with)
pd_with = pd.Timestamp(dt_with_tz)
pd_without = pd.Timestamp(dt_without_tz)
pd_unix_with_tz = pd_with.value // 10 ** 9
pd_unix_without_tz = pd_without.value // 10 ** 9
self.assertEqual(uts_with, pd_unix_with_tz)
self.assertEqual(uts_without, pd_unix_without_tz)
我想问为什么这个断言失败了?结果是 断言错误:1506182400.0!= 1506211200
# convert back to datetime
pd_dt_with_tz = pd_with.to_pydatetime()
pd_dt_without_tz = pd_without.to_pydatetime()
self.assertEqual(pd_dt_with_tz, dt_with_tz)
self.assertEqual(pd_dt_without_tz, dt_without_tz)
这一行 self.assertEqual(pd_dt_without_tz,dt_without_tz) 将导致此错误。 断言错误:datet [16个字符] 7,9,24,0,46,tzinfo =)!= datet [16个字符] 7,9,24,0,0,tzinfo =)
所以我可以说在将时区信息转换为Timestamp之前始终将时区信息放回日期时间是最佳做法吗?
是否有可能在没有时区信息的情况下使这两个断言成功?