Python

旧金山湾区时间与北京时间转换,用python实现时区转换例子

San Francisco Time ?? Beijing Time ?? 把一个时区的时间,比如湾区9:00am,转换成另一个时区的时间,比如北京/香港/新加坡时间,应该是很简单的问题。用Python做时区转换好像挺麻烦的,容易出错。Google出来的前几条结果都不是很让人满意,本文总结我测试过可靠可行不太复杂的方法,以及一些容易出错的地方。 先上可行的Python例子,把三藩(SF)湾区时间9am, 转换成对应的北京时间,用了datetime和pytz。先构造一个湾区时间的对象,然后转化成北京/香港/新加坡时间。 加上注解和debug信息。 可以看到建立的湾区时间时区为-0700而北京时间为0800,可以验证湾区和中国时差为15小时。 时区行话解释 全球标准时间用的是位于英国的格林威治时间(GMT, Greenwich Mean Time)。因为以前格林威治天文台是世界中心,本初子午线或者0度经线就定义为穿过它的经线。然后又有了一个叫世界协调时间的东西(UTC, Coordinated Universal Time)。这个和GMT基本一致,大概就是北京话和普通话的区别吧。北京在Greenwich的东边,时间领先GMT/UTC 8小时,所以叫东八区,代号0800。而湾区在格林威治的西边,时间滞后7个小时(美国国会通过了永久使用夏令时法案),所以叫西7区,代号-0700。而两地时差为7+9=15,北京时间比湾区时间领先15个小时。 同理,日本和韩国位于东9区,代号为0900,那么时间就比为与东八区的中国早1小时。 当地真实时间和约定标准时间 一个地方的真实时间只取决于太阳相对当地的位置,也就是取决于当地经度。但是为了方便,每个国家可以人为规定用什么时间。比如整个中国虽然跨了几个纬度,确人为规定了各地都使用北京时间。新加坡真实时间应该为0655,确规定使用0800,也许是和大中华区保持一致比较方便。 回到Python上,这也正是pytz包的一些坑的来源。pytz用的是地理意义上的真实时间,而人们真正使用的是当地法律约定的时间,这两者是有差别的。 Python datetime不设时区是什么时间? 如果新建一个datetime对象,不设时区的话,会是当地时间。 用epochconverter转换1656658800.0,正是湾区时间2022-07-01 00:00:00 如果replace了timezone,就把底下的timestamp变了,而不是保持timestamp而改变时间表示形式(日期,小时/分/秒)。所以replace(tzinfo=…)并不是做时区变换。而且注意下面例子里上海时间是0806,并不是0800,应该用了地理意义上的真实时间而不是法定时间。这个地理时间在生活中基本没用,这个pytz的坑之一。 参考 Python3中datetime时区转换介绍与踩坑 python datetime时区转换 技巧:用datetime模块处理时区转换,不要用time模块 将UTC、EST时区的时间转化成北京时间(python) pytz库时区的坑(转) The Solution…
Read more

Python Pathlib生存手册,几个短例子极速上手

Pathlib是Python里自带的处理OS路径的library,功能非常强大,可以代替原来的os.path。本文提供几个简单的例子供查询,帮您极速上手,引用到自己的python project里。 创建操作Path对象例子 可以用”/“直接得到下一层目录或文件的Path对象 Home Path对象例子 需要注意的是,Path constructor的参数不认识~。需要用Path.home()。 验证tilda不work 验证Path.home() work 当前目录例子 如果需要当前目录的对象可以用cwd函数或者.加resolve函数 遍历文件夹例子 也就是implement bash命令 用pathlib实现如下 外面函数python_find接受path string,里面的递归函数_python_find接受pathlib.Path object。用iterdir列出当前input path下的所有对象,先打印它们的路径,如果是目录,就继续调用递归函数_python_find打印下一层目录里面的内容。 Pathlib删除文件例子 删除文件 删除目录/文件夹 rmdir只能删除空的文件夹/目录,如果内部还有其他文件或目录会报错。 删除非空目录/文件夹 这个只能自己用上面两个函数用递归实现。这里我增加了显示被删除文件size的信息。 参考 一分钟学一个 Python 标准库之 Pathlib PathLib recursively remove directory? pathlib — Object-oriented filesystem paths…
Read more

安装IBKR python API

到IB官网下载最新API,选Software: TWS API,然后”I Agree” License aggreement。然后选平台,比如TWS API Latest for Mac / Unix。 cd 到下载地址。 根据README.md里说的 具体版本可能有点不一样。我安装的时候README.md里的版本有点过时,不是下载的现有版本。 安装完成后就可以读User’s Guide了。

Python/Pandas实战: 处理IBKR Statement

Python/Pandas实战: 处理盈透Statement

Pandas是一个非常强大的数据分析方面的Python package. 如果是做Machine Learning或者数据分析, 掌握Pandas很省去很多麻烦. 许多Machine Learning前期的数据处理也是用Pandas做得. IBKR(Interactive Brokers, 有时简称IB, 中文叫盈透证券)是美国老牌券商, 也是我的主要使用的券商. 又到了辞旧迎新的时候, 需要看看2020投资收益, 于是趁新年长周末写点小程序做点数据分析. 而这正好覆盖了Pandas的各种常用functions. 下载IB Statement IB Statement提供多种方式下载, 比如html, pdf, csv. 用作数据处理选csv. 内容大概长这样 Statement这个column是内容, 里面有很多项, 而这里我只看“Realized & Unrealized Performance Summary”, 然后相同的第一列后面的列数都是一样的. 上图是Jupyter Lab的显示有问题. 因为文件其实可以看成很多CSV files连在一起, 而第一列可以看成是小csv的文件名. 然后第二列是Header或者Data. Header那行就是告诉你后面的Data行里每一列都是什么….
Read more