Pandas Timestamp,DateTime,Unix Timestamp与Timezone / without Timezone Info之间的转换

时间:2017-09-24 16:15:57

标签: python pandas datetime unix-timestamp

我创建了以下测试用例,以了解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之前始终将时区信息放回日期时间是最佳做法吗?

是否有可能在没有时区信息的情况下使这两个断言成功?

0 个答案:

没有答案