python 时间戳转iso 8601_Python中的ISO时间(ISO 8601)
回答(11)
2 years ago
ISO 8601本地:
import datetime
datetime.datetime.now().isoformat()
UTC至ISO 8601:
import datetime
datetime.datetime.utcnow().isoformat()
本地到ISO 8601没有微秒:
import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
带有TimeZone信息的UTC到ISO 8601(Python 3):
import datetime
datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()
带有TimeZone信息的本地ISO 8601(Python 3):
import datetime, time
# Calculate the offset taking into account daylight saving time
utc_offset_sec = time.altzone if time.localtime().tm_isdst else time.timezone
utc_offset = datetime.timedelta(seconds=-utc_offset_sec)
datetime.datetime.now().replace(tzinfo=datetime.timezone(offset=utc_offset)).isoformat()
对于Python 2,请参阅并使用pytz .
2 years ago
我在the documentation找到了datetime.isoformat . 它似乎做你想要的:
datetime.isoformat([sep])
Return a string representing the date and time in ISO 8601 format, YYYY-MM-DDTHH:MM:SS.mmmmmm or, if microsecond is 0, YYYY-MM-DDTHH:MM:SS
If utcoffset() does not return None, a 6-character string is appended, giving the UTC offset in (signed) hours and minutes: YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if microsecond is 0 YYYY-MM-DDTHH:MM:SS+HH:MM
The optional argument sep (default 'T') is a one-character separator, placed between the date and time portions of the result. For example,
>>>
>>> from datetime import tzinfo, timedelta, datetime
>>> class TZ(tzinfo):
... def utcoffset(self, dt): return timedelta(minutes=-399)
...
>>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
'2002-12-25 00:00:00-06:39'
2 years ago
ISO 8601 Time Representation
国际标准ISO 8601描述了日期和时间的字符串表示 . 这种格式的两个简单例子是
2010-12-16 17:22:15
20101216T172215
(两者均代表2010年12月16日),但格式也允许亚秒级分辨率时间并指定时区 . 这种格式当然不是特定于Python的,但它适合以便携式格式存储日期和时间 . 有关此格式的详细信息,请参见Markus Kuhn entry .
我建议使用此格式在文件中存储时间 .
在此表示中获取当前时间的一种方法是使用Python标准库中time模块的strftime:
>>> from time import strftime
>>> strftime("%Y-%m-%d %H:%M:%S")
'2010-03-03 21:16:45'
您可以使用datetime类的strptime构造函数:
>>> from datetime import datetime
>>> datetime.strptime("2010-06-04 21:08:12", "%Y-%m-%d %H:%M:%S")
datetime.datetime(2010, 6, 4, 21, 8, 12)
最强大的是Egenix mxDateTime模块:
>>> from mx.DateTime.ISO import ParseDateTimeUTC
>>> from datetime import datetime
>>> x = ParseDateTimeUTC("2010-06-04 21:08:12")
>>> datetime.fromtimestamp(x)
datetime.datetime(2010, 3, 6, 21, 8, 12)
References
2 years ago
这是我用来转换为XSD日期时间格式的内容:
from datetime import datetime
datetime.now().replace(microsecond=0).isoformat()
# You get your ISO string
在查找XSD日期时间格式( xs:dateTime )时,我遇到了这个问题 . 我需要从 isoformat 中删除微秒 .
2 years ago
ISO 8601 time format不存储时区名称,仅保留相应的UTC偏移量 .
要将文件ctime转换为ISO 8601时间字符串,同时在Python 3中保留UTC偏移量:
>>> import os
>>> from datetime import datetime, timezone
>>> ts = os.path.getctime(some_file)
>>> dt = datetime.fromtimestamp(ts, timezone.utc)
>>> dt.astimezone().isoformat()
'2015-11-27T00:29:06.839600-05:00'
该代码假定您的本地时区为Eastern Time Zone(ET),并且您的系统为给定的POSIX时间戳( ts )提供了正确的UTC偏移量,即,Python可以访问系统上的历史时区数据库,或者时区具有相同的时区在给定日期的规则 .
>>> import os
>>> from datetime import datetime
>>> import pytz # pip install pytz
>>> ts = os.path.getctime(some_file)
>>> dt = datetime.fromtimestamp(ts, pytz.timezone('America/New_York'))
>>> dt.isoformat()
'2015-11-27T00:29:06.839600-05:00'
在这种情况下结果是相同的 .
如果您需要时区名称/缩写/区域ID,请单独存储 .
>>> dt.astimezone().strftime('%Y-%m-%d %H:%M:%S%z (%Z)')
'2015-11-27 00:29:06-0500 (EST)'
注意:否,UTC偏移中的 : 和 EST 时区缩写不是ISO 8601时间格式的一部分 . 它不是唯一的 .
同一库的不同库/不同版本可以对同一日期/时区使用不同的时区规则 . 如果是未来日期,则规则可能尚未知晓 . 换句话说,相同的UTC时间可能对应于不同的本地时间,具体取决于您使用的规则 - 以ISO 8601格式保存时间可保留UTC时间以及与您平台上使用的当前时区规则相对应的本地时间 . 如果具有不同的规则,您可能需要在不同的平台上重新计算本地时间 .
2 years ago
您需要使用 os.stat 来获取文件创建时间以及 time.strftime 和 time.timezone 的组合以进行格式化:
>>> import time
>>> import os
>>> t = os.stat('C:/Path/To/File.txt').st_ctime
>>> t = time.localtime(t)
>>> formatted = time.strftime('%Y-%m-%d %H:%M:%S', t)
>>> tz = str.format('{0:+06.2f}', float(time.timezone) / 3600)
>>> final = formatted + tz
>>>
>>> final
'2008-11-24 14:46:08-02.00'
2 years ago
如果我错了(我不是),请纠正我,但UTC的偏移会随着夏令时而变化 . 所以你应该使用
tz = str.format('{0:+06.2f}', float(time.altzone) / 3600)
我也相信标志应该是不同的:
tz = str.format('{0:+06.2f}', -float(time.altzone) / 3600)
我错了,但我不这么认为 .
2 years ago
我同意Jarek,而且我还注意到ISO偏移分隔符是一个冒号,所以我认为最终的答案应该是:
isodate.datetime_isoformat(datetime.datetime.now()) + str.format('{0:+06.2f}', -float(time.timezone) / 3600).replace('.', ':')
2 years ago
ISO 8601允许紧凑的表示,除了 T 之外没有分隔符,所以我喜欢使用这个单行来获取快速时间戳字符串:
>>> datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%S.%fZ")
'20180905T140903.591680Z'
如果您不需要微秒,请忽略 .%f 部分:
>>> datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%SZ")
'20180905T140903Z'
当地时间:
>>> datetime.datetime.now().strftime("%Y%m%dT%H%M%S")
'20180905T140903'
2 years ago
我开发了这个功能:
def iso_8601_format(dt):
"""YYYY-MM-DDThh:mm:ssTZD (1997-07-16T19:20:30-03:00)"""
if dt is None:
return ""
fmt_datetime = dt.strftime('%Y-%m-%dT%H:%M:%S')
tz = dt.utcoffset()
if tz is None:
fmt_timezone = "+00:00"
else:
fmt_timezone = str.format('{0:+06.2f}', float(tz.total_seconds() / 3600))
return fmt_datetime + fmt_timezone
2 years ago
import datetime, time
def convert_enddate_to_seconds(self, ts):
"""Takes ISO 8601 format(string) and converts into epoch time."""
dt = datetime.datetime.strptime(ts[:-7],'%Y-%m-%dT%H:%M:%S.%f')+\
datetime.timedelta(hours=int(ts[-5:-3]),
minutes=int(ts[-2:]))*int(ts[-6:-5]+'1')
seconds = time.mktime(dt.timetuple()) + dt.microsecond/1000000.0
return seconds
>>> import datetime, time
>>> ts = '2012-09-30T15:31:50.262-08:00'
>>> dt = datetime.datetime.strptime(ts[:-7],'%Y-%m-%dT%H:%M:%S.%f')+ datetime.timedelta(hours=int(ts[-5:-3]), minutes=int(ts[-2:]))*int(ts[-6:-5]+'1')
>>> seconds = time.mktime(dt.timetuple()) + dt.microsecond/1000000.0
>>> seconds
1348990310.26
python 时间戳转iso 8601_Python中的ISO时间(ISO 8601)相关推荐
- 【Python】将文件夹中文件按时间排序输出及os.path使用汇总
背景 通常使用os.listdir获取的文件list是按照文件名进行排序的,但有时需求是按照文件创建时间或修改时间后排序的结果. 知识回顾 依然使用的系统自带的os功能包.在使用之前我们需要了解几个功 ...
- python实现软件登陆过程中的试用时间校验(网络时间和本地时间双校验)
# !/usr/bin/env python3 # -*- coding: UTF-8 -*- """ @des :""" import r ...
- python 时间戳转化为日期格式 datetime、date、时间元组
python 时间戳–>日期格式 datetime.date.时间元组 1.获取时间戳(返回结果:1600856115.584483) import time timeStamp = time. ...
- python添加时间戳,Python时间戳的使用
Python时间戳的使用 1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" 将其转换为时间数组 importtime timeArray ...
- python 时间戳转iso 8601_python - 如何解析ISO 8601格式的日期?
python - 如何解析ISO 8601格式的日期? 这个问题在这里已有答案: 使用strftime将python datetime转换为epoch ...
- python 时间戳转iso 8601_关于datetime:Python中的ISO时间(ISO 8601)
我有一个文件. 在Python中,我想花费它的创建时间,并将其转换为ISO时间(ISO 8601)字符串,同时保留它在东部时区(ET)中创建的事实. 如何获取文件的ctime并将其转换为指示东部时区的 ...
- 在Docker中使用Dockerfile实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库
在Docker中使用Dockerfile实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库 在上一篇文章中,我们提到了如何使用Docker官方版本的centos7搭建容器集群并实现同一ip ...
- linux dd目录生成iso文件,linux/OSX中“DD”命令制作ISO镜像操作系统安装U盘
linux或者OS X系统中,使用"dd"命令可以直接在终端命令行模式下,制作ISO镜像的系统安装盘. 一.linux系统以centOS7为例. sudo dd if=镜像路径 o ...
- 基类和派生类写在一个文件中_BootISO:从 ISO 文件中创建一个可启动的 USB 设备...
今天,我们将讨论名为 BootISO 的实用程序类似工具.它是一个简单的 bash 脚本,允许用户来从 ISO 文件中创建一个可启动的 USB 设备. -- Prakash Subramanian(作 ...
最新文章
- postman无法获得响应_【原创翻译】POSTMAN从入门到精通系列(二):发送第一个请求...
- 安装python38_debian8安装python3.7
- iOS中的CADisplayLink定时器
- python双循环zip_Python如何同时进行两个循环
- winxp上传文件到服务器,通过SQLServer的xp_cmdshell在服务器之间传送文件
- safari使用canvas引入域外的图片
- OpenCV3学习(9.2)连通域分析函数详解connectedComponents()和connectedComponentsWithStats()
- [Python] L1-017. 到底有多二-PAT团体程序设计天梯赛GPLT
- [Luogu1216][USACO1.5]数字三角形 Number Triangles
- MVC采用Jquery实现局部刷新
- GD32F105V开发过程中的管脚配置问题记录
- 3.2 矩阵乘积的秩
- 鸡兔同笼头吃20脚56c语言,数学课件《鸡兔同笼》
- pythonweb数据可视化_基于Python实现交互式数据可视化的工具(用于Web)
- 天堂2java报错_那位高手帮我解决一下天堂2单机的服务器问题
- VGA主机连接HDMI显示器
- Go官方包 - strings包
- 移动端VIN码识别应用范围
- 逸管家诚信是企业的立业之本
- 自己动手做一个绿色便携版的谷歌浏览器Chrome,可以放入U盘随意带走的
热门文章
- 【老生谈算法】matlab实现TDOA定位的Chan算法源码——TDOA定位
- 【年底超顺SCI】4区计算机科学类SCI,仅剩10篇版面
- 2018戊戌年运大解析,不看后悔
- 百度地图获取行政范围边界-区县级及以上范围
- ue4c++格式化字符串
- python12306买票_自己用python随意写的12306订票代码
- matlab无法加载dll文件,MATLAB帮助例子“无法加载dll”问题
- 一个基于pycuda的矩阵乘法实现,它使用CUDA核心来
- hdu4526威威猫系列故事——拼车记
- 通达信公式转python为什么很难_[转]N年Python老司机,血泪总结新手常见10大错误...