Python时间戳的起点

本文详细介绍了Python中时间戳的定义及与系统时区的关系,通过实例演示了Python和Oracle环境下时间与毫秒之间的相互转换方法,适用于跨平台时间同步和数据处理。

系统时区为东八区
Python时间戳的起点为1970-01-01 08:00:00

代码验证

import datetime
print(datetime.datetime.fromtimestamp(0))
打印结果
1970-01-01 08:00:00
from time import strftime, localtime
print(strftime('%Y-%m-%d %H:%M:%S', localtime(0)))
打印结果
1970-01-01 08:00:00

时区

from datetime import datetime, timezone, timedelta

t = datetime(year=1970, month=1, day=1, hour=0, minute=0, second=0, microsecond=0,
             tzinfo=timezone(timedelta(hours=0)))
print(t)
print(t.timestamp())

t = datetime(year=1970, month=1, day=1, hour=8, minute=0, second=0, microsecond=0,
             tzinfo=timezone(timedelta(hours=8)))
print(t)
print(t.timestamp())

打印结果

1970-01-01 00:00:00+00:00
0.0
1970-01-01 08:00:00+08:00
0.0

相关应用

Python时间和毫秒互转

from datetime import datetime


def now() -> datetime:
    return datetime.now()


def str2datetime(s, fmt='%Y-%m-%d %H:%M:%S') -> datetime:
    return datetime.strptime(s, fmt)


def datetime2str(d, fmt='%Y-%m-%d %H:%M:%S') -> str:
    return d.strftime(fmt)


def datetime2second(d: datetime) -> float:
    return d.timestamp()


def datetime2millisecond(d: datetime) -> int:
    return int(d.timestamp() * 1000)


def second2datetime(f: float) -> datetime:
    return datetime.fromtimestamp(f)


def millisecond2datetime(ms: int) -> datetime:
    return second2datetime(ms / 1000)


t = datetime.now()
print(t)
sec = datetime2second(t)
print(sec)
t = second2datetime(sec)
print(t)

Oracle时间和毫秒互转

日期 -> 毫秒

SELECT
TO_NUMBER(
TO_DATE('2020-5-15 23:0:0','YYYY-MM-DD HH24:MI:SS')-TO_DATE('1970-01-01 8:0:0','YYYY-MM-DD HH24:MI:SS')
)*24*60*60*1000
FROM dual;

毫秒 -> 日期

SELECT
TO_CHAR(
1589554800000/(1000*60*60*24)+TO_DATE('1970-01-01 08:00:00','YYYY-MM-DD HH:MI:SS'),'YYYY-MM-DD HH24:MI:SS'
)FROM dual;
<think>好的,我现在需要帮助用户学习如何在Python中生成时间戳。用户明确提到了获取当前时间时间戳示例和方法。首先,我得回忆一下Python中处理时间戳的常用模块,比如timedatetime。 根据用户提供的引用,特别是引用[2]、[3]、[4],用户可能已经看过一些相关资料,但需要更清晰的步骤说明。我需要确保回答覆盖不同精度的时间戳,比如秒级、毫秒级,甚至微秒级。同时,用户可能需要具体的代码示例,这很重要。 首先,我应该分步骤讲解。第一步可能是使用time模块获取秒级时间戳time.time()返回的是浮点数,但截断到秒的话需要转换为整数。引用[2]提到精确到秒的时间戳,所以这应该是第一个方法。 接下来,处理毫秒级时间戳。引用[4]指出13位时间戳是毫秒级的,可以通过乘以1000并取整得到。这里需要注意的是,time.time()本身就有小数部分,代表毫秒和微秒,所以乘以1000后取整即可得到13位的时间戳。不过,用户可能也会关心datetime模块的方法,比如引用[3]中的示例使用了datetime.datetime.now().timestamp(),这也需要提到。 然后是微秒级的时间戳,虽然用户没有明确提到,但引用[4]提到16位和19位,可能需要简要说明。不过常用的可能是毫秒级和秒级,所以重点放在这两个上。 另外,用户提供的引用[3]中有一个示例,使用strftime来格式化日期时间,这可能需要解释,但用户主要关注的是时间戳,所以可能不需要深入讲解格式化,除非转换相关。 还需要注意代码示例的正确性。比如,使用int()来转换时间戳,或者使用round()函数。同时,提醒用户时间戳的精度可能因系统而异,但通常现代系统已经支持到微秒级。 可能的问题点:用户是否知道时间戳起点(Unix纪元时间),是否需要解释?引用[2]已经提到时间戳的定义,所以可能不需要重复,但可以简单提及。 总结回答结构: 1. 介绍时间戳的概念(简短)。 2. 使用time模块获取秒级和毫秒级。 3. 使用datetime模块的方法。 4. 微秒级的处理。 5. 时间戳转换为可读时间(反向操作,可能对用户有用)。 6. 注意事项,比如平台差异。 需要检查每个步骤的代码是否符合引用内容,比如引用[3]中的datetime示例是否正确,引用[4]中的乘以1000方法是否准确。 另外,用户可能需要生成相关问题,根据系统级指令,需要生成相关问题。相关问题应该围绕时间戳的不同精度、转换方法、模块之间的区别(time vs datetime)、应用场景等。 需要确保回答中使用正确的中文,并且LaTeX格式正确,但根据用户的问题,可能不需要数学公式,但如果有涉及计算的表达式,比如时间戳转换,需要用$...$包裹,例如乘以1000的部分。 最后,引用需要正确标注,根据用户提供的引用链接,引用[^2]、[^3]、[^4]对应不同的部分,确保在回答中正确引用。</think>在Python中获取当前时间戳主要使用`time`和`datetime`模块,具体方法如下: --- ### 1. **秒级时间戳(10位)** 使用`time.time()`获取当前时间戳(浮点数),截断小数部分后得到10位秒级时间戳: ```python import time timestamp_10 = int(time.time()) # 例如:1655000000 ``` 此方法适用于需要以秒为单位的场景,如日志记录。 --- ### 2. **毫秒级时间戳(13位)** 将`time.time()`的结果乘以1000并取整,得到13位毫秒级时间戳: ```python timestamp_13 = int(time.time() * 1000) # 例如:1655000000123 ``` 适用于HTTP请求、数据库操作等需要更高精度的场景。 --- ### 3. **使用datetime模块** 通过`datetime`获取当前时间,再转换为时间戳: ```python from datetime import datetime # 秒级时间戳 timestamp_sec = int(datetime.now().timestamp()) # 1655000000 # 毫秒级时间戳 timestamp_millis = int(datetime.now().timestamp() * 1000) # 1655000000123 ``` `datetime`模块还支持更灵活的时间格式转换(如`strftime`)。 --- ### 4. **微秒级时间戳** 若需要更高精度,直接保留`time.time()`的小数部分: ```python timestamp_full = time.time() # 例如:1655000000.123456 ``` 微秒部分可通过`datetime`获取: ```python dt = datetime.now() microsecond = dt.microsecond # 当前时间的微秒部分(0~999999) ``` --- ### 5. **时间戳转可读时间** 将时间戳转换为标准时间格式: ```python # 秒级时间戳时间 readable_time = datetime.fromtimestamp(1655000000).strftime('%Y-%m-%d %H:%M:%S') # 输出:2022-06-12 12:13:20 # 毫秒级时间戳时间(需先除以1000) readable_time_ms = datetime.fromtimestamp(1655000000123 / 1000).strftime('%Y-%m-%d %H:%M:%S.%f') # 输出:2022-06-12 12:13:20.123000 ``` --- ### 注意事项 - **平台差异**:部分系统对微秒级支持可能不同,建议优先使用`time`或`datetime`模块。 - **时区问题**:默认时间戳基于UTC时区,若需本地时间,需额外处理时区偏移。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值