Python 处理 ISO8601 时间格式:去除 T 并保留毫秒精度

Owen
Owen
发布时间:2026-10-15| 6人浏览过
原创

本文介绍如何在 Python 中处理 ISO8601 格式的时间字符串,重点解决时间字符串中 'T' 分隔符的问题。通过示例代码展示如何将带 'T' 的时间转换为标准格式,同时保留毫秒精度(.%f)。此外,还涵盖了 Django REST Framework 中处理日期时间序列化的方法,以及计算日期缺失值的技巧,帮助开发者在数据处理和 API 开发中规范时间格式。

直接查看以下代码示例即可理解具体实现。


import datetime
# 时间格式 .%f 毫秒
## "%Y-%m-%dT%H:%M:%S.%f"
# 格式 秒
## "%Y-%m-%dT%H:%M:%S"
# 格式 分钟
## "%Y-%m-%dT%H:%M"
# 将 字符串格式的时间,转成时间毫秒格式
update_time = datetime.datetime.strptime(i["UpdatedAt"][:26], "%Y-%m-%dT%H:%M:%S.%f")
# 将时间格式转成 字符串
update_time = update_time.strftime('%Y-%m-%d %H:%M:%S.%f')

补充内容:Python 计算 T-N 天日期时可能出现的缺失问题。

直接查看以下代码示例即可理解具体实现。


#! /usr/bin/env python
# -*- coding:utf-8 -*-
from datetime import datetime, date, timedelta
 
m = [('JD','2018-11-08'),('Aussie FS','2018-10-10'),('Braun FS','2018-11-09'),('Global FS','2018-11-07')]
t = [('JD',	'2018-09-10'),('JD',	'2018-09-11'),('JD',	'2018-09-12'),
('JD',	'2018-09-13'),
('JD',	'2018-09-14'),
('JD',	'2018-09-15'),
('JD',	'2018-11-08'),
('Aussie FS',	'2018-10-02'),
('Aussie FS',	'2018-10-03'),
('Aussie FS',	'2018-10-04'),
('Aussie FS',	'2018-10-05'),
('Aussie FS',	'2018-10-06'),
('Aussie FS',	'2018-10-07'),
('Aussie FS',	'2018-10-08'),
('Braun FS',	'2018-10-28'),
('Braun FS',	'2018-11-08'),
('Braun FS',	'2018-10-30'),
('Braun FS',	'2018-10-31'),
('Braun FS',	'2018-11-01'),
('Global FS',	'2018-09-18'),
('Global FS',	'2018-09-19'),
('Global FS',	'2018-09-20'),
('Global FS','2018-11-08'),
('Global FS',	'2018-09-22'),
('Global FS',	'2018-09-23')
 
]
mm = '2018-11-08'
for x in range(0, len(m)):
    n = []
    n_new = []
    i = 0
    while i < len(t):
        if t[i][0] == m[x][0]:
            n.append([t[i][0], t[i][1]])
        i += 1
    n_new = sorted(list(n))
    if n_new[-1][1] != mm:
        print '%s最大业务时间为:%s,没有到达T-1:%s'%(n_new[-1][0],n_new[-1][1],mm)
 
def get_nday_list(n):
    before_n_days = []
    for i in range(1, n + 1)[::-1]:
        before_n_days.append(str(date.today() - timedelta(days=i)))
    return before_n_days
 
a = get_nday_list(10)
b = get_nday_list(30)
ttt = []
for x in range(0, len(m)):
    d = []
    d_new = []
    i = 0
    while i < len(t):
        if t[i][0] == m[x][0]:
            d.append([t[i][0], t[i][1]])
        i += 1
    d_new = sorted(list(d))
    print d_new
    ll = []
    for xx in range(0,len(d_new)):
        ll.append(d_new[xx][1])
    kk = 0
    while kk<len(a):
        if a[kk] not in ll:
            ttt.append([m[x][0],a[kk]])
        kk +=1
print '业务日期缺失的为:%s'%(ttt)
 

补充内容:针对 Django DRF 中 JSON 格式化日期时间带 'T' 的问题,基于 Python 的解决方法。


# models.py 
update_time = models.DateTimeField(verbose_name=u'更新时间', default=timezone.now)

问题描述:日期与小时之间包含 'T' 字符。


"gmt_created": "2019-05-19T22:47:46.853262"

解决方法:


# serializers.py 
class DeviceSerialiser(ModelSerializer):
    # 设置日期格式化格式
    update_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S') 
    class Meta:
        model = WaterDevice
        fields = ('__all__')

以上为个人经验总结,希望能为大家提供参考。如果存在错误或未考虑周全之处,欢迎指正。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。