Finology 大数据金融

通过大数据以量化金融

我们从外部获取到的时间数据,是str类型的。如果时间的时区为UTC+0时区,要转成东八区来显示,可以按如下方法来操作。

1
2
3
4
5
6
7
from datetime import datetime
import pytz

format = "%Y-%m-%d %H:%M:%S"
date = datetime.strptime("2022-04-01 12:00:00", format)
converted_date = date.replace(tzinfo=pytz.utc).astimezone(pytz.timezone("Asia/Shanghai"))
print(datetime.strftime(converted_date, format))

如果是在DataFrame里,比如从Excel里面读出来的数据。可用下面方法。

1
2
3
4
5
6
7
import pandas as pd

df = pd.DataFrame(["2022-03-22 12:00:05", "2022-03-22 13:10:05"], columns=['date'])

df['date2'] = pd.to_datetime(df['date'], format="%Y-%m-%d %H:%M:%S")
df['date3'] = df['date2'].dt.tz_localize(pytz.utc).dt.tz_convert("Asia/Shanghai").dt.strftime("%Y-%m-%d %H:%M:%S")
df

这个dt不能缺少,用于Datetime上面的。

1
2
3
df['date2'].dt

<pandas.core.indexes.accessors.DatetimeProperties object at 0x7fbe14fd2f10>

同表,根据查找出来的主键id,进行删除,会报错。

比如:

1
2
3
DELETE FROM t_user WHERE id IN(
SELECT id FROM t_user WHERE name = "Hello"
)

Error Code: 1093. You can't specify target table 't_user' for update in FROM clause

解决方案:

把查出来的结果生成一个临时表。

1
2
3
4
DELETE FROM t_user WHERE id IN(
SELECT tmp.id FROM
(SELECT id FROM t_user WHERE name = "Hello") tmp
)

但这时有可能还会报个错,提示这是不安全的操作方法。

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preference -> SQL Editor and reconnect.

这时可以通过以下语句关掉安全阀。

1
SET SQL_SAFE_UPDATES = 0;

再次执行删除命令就可以成功执行了。

打印日志时,一个对象比较大的时候,json字符串比较长,阅读性不强。

这时可以通过一些工具,把json格式化,美化一下,能更方便的阅读。

jackson方式

1
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);

Gson方式

1
2
Gson gson = new GsonBuilder().setPrettyPrinting().create();
gson.toJson(obj);
0%