Python 日期字符串和时间戳解析方法详解

2023-11-06


原文链接:https://dreamhomes.top/posts/202103091919.html


由于从事智能运维AIOps相关的算法研究,因此日常接触的最多就是时间序列相关的数据。在不同场景下时间字符串表示的格式可能都不相同,因此本文记录下所了解的字符串解析方法。

time 模块

一般情况下都是将时间字符串转为时间戳或者反之转换,time 模块即可解决问题;

import time
# 时间戳转为日期
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(t))
# 日期转为时间戳
time.mktime(time.strptime(d, "%Y-%m-%dT%H:%M:%S.%fZ"))

⚠️ 注意:上面时间转换方法操作简单,可以满足大部分需求;但是存在两种问题:

  • 时区问题,例如UTC格式;【如果是时间戳就没什么区别?】
  • 字符串格式问题,例如不同的日期字符串格式;

datetime 模块

datetime 模块比 time 模块功能更加丰富;

详细的接口说明参考:https://docs.python.org/zh-cn/3.8/library/datetime.html

例如将 UTC 时间转为本地时间格式:

from datetime import datetime, timedelta

utc = "2021-03-08T08:28:47.776Z"
UTC_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
utc_time = datetime.strptime(utc, UTC_FORMAT)
local_time = utc_time + timedelta(hours=8)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))    # 2021-03-08 16:28:47.776000

时间戳转为时间字符串:

ts = 1615289959 # datetime.now().timestamp()
datetime.fromtimestamp(1615289959).strftime("%Y-%m-%d %H:%M:%S.%f") # '2021-03-09 19:39:19.000000'

dateutil 模块

dateutil 模块具有扩展时区和解析支持的第三方库,时间解析功能非常强大几乎包含任何形式的时间字符串格式;

详细接口参考文档:https://dateutil.readthedocs.io/en/stable/

参考案例:

>>> from dateutil.relativedelta import *
>>> from dateutil.easter import *
>>> from dateutil.rrule import *
>>> from dateutil.parser import *
>>> from datetime import *
>>> now = parse("Sat Oct 11 17:13:46 UTC 2003")
>>> today = now.date()
>>> year = rrule(YEARLY,dtstart=now,bymonth=8,bymonthday=13,byweekday=FR)[0].year
>>> rdelta = relativedelta(easter(year), today)
>>> print("Today is: %s" % today)
Today is: 2003-10-11
>>> print("Year with next Aug 13th on a Friday is: %s" % year)
Year with next Aug 13th on a Friday is: 2004
>>> print("How far is the Easter of that year: %s" % rdelta)
How far is the Easter of that year: relativedelta(months=+6)
>>> print("And the Easter of that year is: %s" % (today+rdelta))
And the Easter of that year is: 2004-04-11

Pytz 模块可以与之共同使用来指定时区;Pytz 参考:https://pypi.org/project/pytz/

参考案例:

>>> from datetime import datetime, timedelta
>>> from pytz import timezone
>>> import pytz
>>> utc = pytz.utc
>>> utc.zone
'UTC'
>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
>>> amsterdam = timezone('Europe/Amsterdam')
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print(loc_dt.strftime(fmt))
2002-10-27 06:00:00 EST-0500
    
>>> ams_dt = loc_dt.astimezone(amsterdam)
>>> ams_dt.strftime(fmt)
'2002-10-27 12:00:00 CET+0100'

其它技巧

macOS :

// 将时间戳转为日期
$ date -r 1615289959
// 将日期转为时间戳
$ date -j -f "%Y-%m-%d %H:%M:%S" "2021-03-09 07:10:00" "+%s"

附录

python中时间日期格式化符号:

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00-59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为 0,星期一为 1,以此类推。
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 日期字符串和时间戳解析方法详解 的相关文章

随机推荐

  • vue 代理服务,解决跨域问题

    1 解决跨域访问失败 在项目的根目录下创建一个 vue config js 文件 创建配置文件 module exports devServer proxy api target http cdn apc 360 cn ws true pa
  • java中^怎么用_^运算符在Java中做什么?

    插入符号 运算符在Java中具有什么功能 当我尝试这个 int a 5 n 它给我 for n 5 returns 0 for n 4 returns 1 for n 6 returns 3 所以我猜它不执行幂运算 但是那是什么呢 您可以张
  • 2023-9-12 完全背包问题

    题目链接 完全背包问题 初版 时间复杂度拉满 include
  • 第四章 随机变量的数据特征 4.3协方差及相关系数

    第四章 随机变量的数据特征 4 3协方差及相关系数 文章目录 第四章 随机变量的数据特征 4 3协方差及相关系数 协方差和相关系数的概念和性质 相关系数的意义 协方差和相关系数的概念和性质 其在一定程度上反应了X 与 Y之间的关系 按照定义
  • 如何更高效的提高CSDN浏览量 - 提升博客的曝光度

    前言 CSDN作为中国最大的IT技术社区 对于技术人员而言 拥有高浏览量的博客是提升个人知名度和影响力的关键 本文将介绍一个名为 CSDN Browsing Plus 的工具 通过它 我们可以更高级地增长CSDN的浏览量 提升博客的曝光度
  • 获取文件的绝对路径

    想要访问执行程序 exe 路径下的文件 有以下几个步骤 1 先通过函数GetModuleFileName获取执行程序的绝对路径 TCHAR szPath MAX PATH 0 GetModuleFileName NULL szPath MA
  • 4-3 嵌入法

    文章目录 4 3 嵌入法 基础知识 项目案例 动手练习 4 3 嵌入法 请参考 数据准备和特征工程 中的相关章节 调试如下代码 基础知识 import pandas as pd from sklearn model selection im
  • oracle 视图 其他用户,oracle创建视图中涉及到另外一个用户的表权限不足问题

    oracle创建视图中涉及到另外一个用户的表权限不足问题 在oracle中存储过程或者视图等对象创建时 如果涉及到另外一个用户的表 即使你已经grant dba了 也不行 必须显式地赋予查询权限 否则 你会发现在pl sql中可以执行语句
  • Linux mmap读/写触发共享文件页生命周期

    概述 Linux的mm内存子系统的核心功能就要要管理各种类型的page 确保能高效分配和释放 让物理内存得以最大化使用 初识内存系统往往关注的是page的申请和管理流程 容易忽略page的释放回收流程 其实理解mm中的内存回收和释放也是最核
  • 智能驾驶系统简介和测试要点分析

    智能驾驶系统是一种能够自主感知 决策和执行行驶任务的车辆控制系统 常见的智能驾驶系统包括 自动泊车系统 能够自动控制车辆完成泊车过程 包括寻找车位 转向 加速 制动等操作 自适应巡航系统 能够根据车速 车距和交通状况等因素自适应调整车速 并
  • react实现多选框切换样式逻辑

    import React Component from react class App extends Component constructor props super props this state checkboxItems con
  • time datetime模块 一篇精通

    time datetime python3中time模块的用法 导入 import time 查看time模块内置的能够使用的方法 print dir time 查看内置方法的说明 help time time method help ti
  • NVIDIA驱动安装

    需要去英伟达官网下载适合自己电脑的版本 nvidia网页可以自己测出你的电脑所需要的型号 首先Ctrl Alt F1进入字符界面 删除原有驱动版本 sudo apt get purge nvidia sudo apt get autorem
  • 执行.sh文件(shell脚本)的几种方式

    第一种 要进到shell脚本所在文件夹中 sh helloworld sh 第二种 要进到shell脚本所在文件夹中 bash helloworld sh 第三种 要进到shell脚本所在文件夹中 helloworld sh 第四种 hom
  • uniapp app以及小程序图片添加水印

    const ctx uni createCanvasContext myCanvas const ctx1 uni createCanvasContext myCanvas1 uni getImageInfo src this carInf
  • UiBot如何使用CSS Selector

    UiBot默认的数据抓取可以抓取整个表格 但是有时候我们并不想抓取整个表格 比方说 我们想将下图所有的头像复制到Excel里 这个时候我们无法使用数据抓取功能 因为我们并不是想抓取数据 而是要操作网页里的元素 将上图头像复制到Excel里的
  • Centos7 扩展系统磁盘大小

    Centos7扩展系统磁盘大小 系统盘大小不足 需要扩展系统盘大小 需要添加一块硬盘作为要使用的系统盘的扩展 我的是原来sda就有空间没有分配 所以不用单独再加磁盘了 直接使用sda的未分配的空间 如果是单独新增的一个磁盘例如 dev sd
  • Jenkins 联动 飞书 以签名校验方式 推送测试报告通知消息

    1 获取 飞书 Bot webhook 和 secret 2 python脚本 参考 Song Estelle 的文章 这里重写了部分代码 以签名校验方式发送通知 记得安装相关依赖 usr bin python3 encoding utf
  • Java 中的阻塞队列

    Java 中的阻塞队列 1 ArrayBlockingQueue 由数组结构组成的有界阻塞队列 2 LinkedBlockingQueue 由链表结构组成的有界阻塞队列 3 PriorityBlockingQueue 支持优先级排序的无界阻
  • Python 日期字符串和时间戳解析方法详解

    原文链接 https dreamhomes top posts 202103091919 html 由于从事智能运维AIOps相关的算法研究 因此日常接触的最多就是时间序列相关的数据 在不同场景下时间字符串表示的格式可能都不相同 因此本文记