Python 处理 ISO8601 时间格式:去除 T 并保留毫秒精度
本文介绍如何在 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__')
以上为个人经验总结,希望能为大家提供参考。如果存在错误或未考虑周全之处,欢迎指正。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













