Python中datetime时间戳精确到单位的用法

本文介绍了如何使用Python的datetime模块来精确地处理时间,包括获取当前时间并按不同精度(如秒、分钟、小时等)进行格式化输出,以及通过timedelta进行时间增减操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于爬虫爬取到的文章存储到数据库时,有时需要到文档发布的时间进行处理。此时要用到datetime将时间精确到某一个单位。
# conding=utf8
from datetime import datetime, timedelta
import time
a = datetime.now()
print(a.strftime("%Y-%m-%d %H:%M:%S"))  # 获取当前时间精确到秒数
# 2018-01-28 23:33:18
print(a.strftime("%Y-%m-%d %H:%M"))  # 获取当前时间精确到分钟
# 2018-01-28 23:33
print(a.strftime("%Y-%m-%d %H"))  # 获取当前时间精确到小时
# 2018-01-28 23
print(a.strftime("%Y-%m-%d"))  # 获取当前时间精确带天
# 2018-01-28
print((a - timedelta(seconds=5)).strftime("%Y-%m-%d %H:%M:%S"))
# 2018-01-28 23:36:39
print((a - timedelta(minutes=5)).strftime("%Y-%m-%d %H:%M"))
# 2018-01-28 23:28
print((a - timedelta(hours=5)).strftime("%Y-%m-%d %H"))
# 2018-01-28 18
print((a - timedelta(days=5)).strftime("%Y-%m-%d"))
# 2018-01-23



<think>我们将datetime.now()转换成秒,通常指的是转换成时间戳(自1970年1月1日UTC以来的秒数)。在Python中,我们可以使用timestamp()方法来实现。 注意:datetime.now()返回的是本地当前时间(不带时区信息),在转换成时间戳时,Python会假设这个时间是在当前系统的时区中,然后将其转换为UTC时间戳。 如果你需要精确的UTC时间戳,可以显式地使用带时区的datetime对象。 步骤: 1.datetime模块导入datetime类 2. 使用datetime.now()获取当前时间 3. 使用timestamp()方法将其转换为秒(浮点数,包括小数部分表示毫秒、微秒) 但是,如果由于某些原因(比如Python版本低于3.3)不能使用timestamp()方法,我们可以使用另一种方法:计算与UNIX纪元(1970-01-01 00:00:00 UTC)的时间差。 方法1(推荐,Python 3.3+): current_time = datetime.now() timestamp = current_time.timestamp() 方法2(兼容旧版本): epoch = datetime(1970, 1, 1) current_time = datetime.now() timestamp = (current_time - epoch).total_seconds() 注意:方法2中,我们计算的是本地时间与UTC纪元的时间差,但datetime.now()返回的是本地时间,而UNIX纪元是UTC时间。在计算时,由于时区的原因,可能会产生偏差。为了避免时区问题,我们可以将epoch设置为本地时区的UNIX纪元时间,但这样比较复杂。因此,更推荐使用方法1。 然而,在Python3.3及以上版本,timestamp()方法已经处理了时区问题。如果当前时间对象是naive(没有时区信息),则会被视为系统本地时间。 如果要求精确的UTC时间戳,可以使用: utc_now = datetime.utcnow() 但是注意:datetime.utcnow()返回的是没有时区信息的UTC时间。在计算时间戳时,我们也可以使用: timestamp_utc = (utc_now - datetime(1970,1,1)).total_seconds() 但是,使用utcnow()然后减去epoch(也是UTC)得到的时间差就是正确的UTC时间戳。 因此,根据需求选择: 1. 如果你想要当前系统本地时间对应的时间戳(即,根据你所在地的时区计算的时间戳),使用datetime.now().timestamp() 2. 如果你想要UTC时间时间戳,使用datetime.utcnow(),然后减去epoch(UTC)得到时间戳。 但注意:第二种方法(使用utcnow)计算时间戳时,由于utcnow返回的是naive的UTC时间,而epoch也是naive的,但默认是UTC,所以计算正确。 然而,更推荐使用带时区的方法,尤其是在处理跨时区应用时。可以使用pytz库或者Python3.2+的timezone类。 示例代码(方法1):</think>在 Python 中将 `datetime.now()` 转换为秒数,最直接的方法是使用 **时间戳(timestamp)**。时间戳表示自 **1970年1月1日 UTC(Unix纪元)** 以来的秒数,是一个浮点数,可直接用于数学计算。 ### 解决方案: ```python from datetime import datetime # 获取当前时间 current_time = datetime.now() # 转换为秒数(时间戳) timestamp_seconds = current_time.timestamp() print(f"当前时间: {current_time}") print(f"转换为秒数: {timestamp_seconds:.6f}") # 保留6位小数 ``` ### 输出示例: ``` 当前时间: 2023-10-15 14:30:45.123456 转换为秒数: 1697373045.123456 ``` ### 关键点解释: 1. **`timestamp()` 方法**: - 将 `datetime` 对象转换为 Unix 时间戳(浮点数) - 包含整数部分(秒)和小数部分(微秒) - 基于 UTC 时间,自动处理时区转换 2. **精确度**: - 默认精度为微秒级(1秒 = 1,000,000微秒) - 示例值 `1697373045.123456` 表示: - `1697373045` 秒 - `0.123456` 秒(即 123,456 微秒) ### 其他转换方法: #### 方法 1:仅获取整数秒(丢弃微秒) ```python # 方法1:直接取整 whole_seconds = int(current_time.timestamp()) # 方法2:使用替换方法 from datetime import datetime current_time = datetime.now().replace(microsecond=0) whole_seconds = int(current_time.timestamp()) ``` #### 方法 2:计算从特定时间开始的秒数 ```python # 计算从今天0点开始的秒数 from datetime import datetime, time today_start = datetime.combine(datetime.today(), time.min) seconds_since_midnight = (datetime.now() - today_start).total_seconds() print(f"今天已过去 {seconds_since_midnight:.0f} 秒") ``` #### 方法 3:自定义参考时间点 ```python # 计算从自定义时间开始的秒数 custom_start = datetime(2023, 1, 1) seconds_since_custom = (datetime.now() - custom_start).total_seconds() ``` ### 注意事项: 1. **时区处理**: - 对于需要精确时区的场景,使用带时区的 `datetime`: ```python from datetime import datetime, timezone utc_time = datetime.now(timezone.utc) utc_seconds = utc_time.timestamp() ``` 2. **性能考虑**: - 时间戳计算是高效的浮点运算 - 比直接操作 `datetime` 对象快约 10 倍 3. **时间范围**: - 支持的时间范围:1970 ~ 2038 年(32位系统限制) - 64位系统无此限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值