百科:
时间戳是指格林威治时间1970年01月01日00时00分00秒起至当下的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。
时间戳
Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
北京时间
夏令时
1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。
JDK 不同版本的夏令时问题
夏令时的起止,是政令对日历描述的人为干预。每年均可能发生变化,JDK 如何感知这个规律并在系统上加以体现的?穷举所有变化,并配置在 JDK 中。详见:Timezone Data Versions in the JRE Software
不同版本下 Asia/Shanghai 时区夏令时起始时间不同,早期维护者认为中国标准时间的夏令时切换发生在0时,而后来又经证明发生在2时,新版本 JDK 及时修正了这个问题。
获取当前时间戳
Swift | Copy |
Go | |
Java | |
JavaScript | |
Objective-C | |
MySQL | |
SQLite | |
Erlang | |
PHP | |
Python | |
Ruby | |
Shell | |
Groovy | |
Lua | |
.NET/C# | |
Dart | |
不同位数时间戳用pandas转换
10位,是秒:
比如 1571647885 是1970-01-01以来的秒数
from pandas.api.types import is_numeric_dtype
...
if is_numeric_dtype(result_df[column_name]):
result_df[column_name] = pd.to_datetime(result_df[column_name], unit='s').dt.strftime('%Y-%m-%d %H:%M:%S')
13位,是毫秒:
if is_numeric_dtype(result_df[column_name]):
result_df[column_name] = pd.to_datetime(result_df[column_name], unit='ms').dt.strftime('%Y-%m-%d %H:%M:%S')
16位,是微秒:
if is_numeric_dtype(result_df[column_name]):
result_df[column_name] = pd.to_datetime(result_df[column_name]/1000, unit='ms').dt.strftime('%Y-%m-%d %H:%M:%S')
这样转换出来是UTC-0时区的时间。如果想要strftime转换出来的是东八区本地时间,需要strftime之前转换一次时区。
result_df[column_name] = pd.to_datetime(result_df[column_name], unit='s').dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai')
result_df[column_name] = result_df[column_name].dt.strftime('%Y-%m-%d %H:%M:%S')