我正在尝试在python中生成一个RFC3339 UTC时间戳。到目前为止,我已经能够做到以下几点:

>>> d = datetime.datetime.now()

>>> print d.isoformat('T')

2011-12-18T20:46:00.392227

我的问题是设置UTC偏移量。

根据文档,类方法datetime.now([tz])采用可选的tz参数,其中tz must be an instance of a class tzinfo subclass和datetime.tzinfo是an abstract base class for time zone information objects.参数。

这就是我迷路的地方——为什么TZINFO是一个抽象类,我应该如何实现它?

(注意:在PHP中,它和timestamp = date(DATE_RFC3339);一样简单,这就是为什么我不理解为什么python的方法如此复杂的原因…)

刚刚发现了类似的问题:Python中的iso时间(iso8601)?

时区是一种痛苦,这可能就是为什么它们选择不将它们包括在日期时间库中的原因。

试试PYTZ,它有你要找的TZINFO:http://pytz.sourceforge.net网站/

您需要首先创建datetime对象,然后按如下方式应用时区,然后您的.isoformat()输出将包括所需的UTC偏移量:

d = datetime.datetime.utcnow()

d_with_timezone = d.replace(tzinfo=pytz.UTC)

d_with_timezone.isoformat()

'2017-04-13T14:34:23.111142+00:00'

或者,只需使用UTC,在末尾加上一个"Z"(表示祖鲁时区),将"时区"标记为UTC。

d = datetime.datetime.utcnow() #

print d.isoformat("T") +"Z"

'2017-04-13T14:34:23.111142Z'

@Monkut-谢谢-Pytz类看起来像另一个可以工作的实现,但是我最终使用了包含在文档中的示例,按照Ruakh的答案。

@蒙库特-+1你的第二个例子也是个好主意。

它不会为我返回微秒:-/

在Python 3.3 +中:

>>> from datetime import datetime, timezone

>>> local_time = datetime.now(timezone.utc).astimezone()

>>> local_time.isoformat()

'2015-01-16T16:52:58.547366+01:00'

在旧的python版本上,如果只需要一个以UTC表示当前时间的感知日期时间对象,那么可以定义一个简单的TZINFO子类,如文档中所示,以表示UTC时区:

from datetime import datetime

utc_now = datetime.now(utc)

print(utc_now.isoformat('T'))

# -> 2015-05-19T20:32:12.610841+00:00

您还可以使用tzlocal模块获取表示您的本地时区的pytz时区:

#!/usr/bin/env python

from datetime import datetime

from tzlocal import get_localzone # $ pip install tzlocal

now = datetime.now(get_localzone())

print(now.isoformat('T'))

它可以在python 2和3上工作。

手放低,python 3.3的最佳答案+

从技术上讲,ISO 8601和RFC 3339不完全兼容……存在一些差异,例如ISO 8601允许UTC偏移部分使用减号或连字符,而RFC 3339只允许使用连字符。到目前为止,我看到的每一个.isoformat()实现(只有两个)都与RFC3339重叠,但最好让自己意识到这些差异

@Villapx:RFC3339是ISO 8601的简介。碰巧,datetime.isoformat()是用于时区感知日期时间的RFC3339(这就是我使用它的原因)。

@J.F.Sebastian是的,看起来你是对的……从文件中,isotime()[gives] the UTC offset in (signed) hours and minutes: YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM,这是RFC3339。它没有明确地说它将使用连字符,而不是减号,但它是由示例所隐含的

虽然,isoformat()没有考虑tzinfo对象的夏令时偏移量——当我更改dst()返回值时,isoformat()仍然返回相同的字符串。

@villapx:isoformat()返回正确的值,它只是反映datetime对象包含的内容。也就是说,它显示了它的.utcoffset()值。

@J.F.Sebastian是的,这就是我的意思——只是想让潜在用户知道isoformat()不知道DST

@维拉克斯:不,是错的。你误导了"潜在用户"。如果.utcoffset()没有反映.dst()的值,那么你的datetime类就坏了。

@J.F.塞巴斯蒂安哦,哇,你说得对。我完全被datetime.tzinfo.dst()文件误导了:Note that DST offset, if applicable, has already been added to the UTC offset returned by utcoffset(), so there’s no need to consult dst() unless you’re interested in obtaining DST info separately.我没有直接在上面看到,对于utcoffset()文件,上面写着"Note that this is intended to be the total offset from UTC."。

在您链接到的同一个文档中,它进一步解释了如何实现它,给出了一些示例,包括UTC类(表示UTC)的完整代码、FixedOffset类(表示与UTC有固定偏移的时区,而不是带有dst和whatnot的时区)以及其他一些示例。

@Ruakh-谢谢,我错过了那些例子-LocalTimezone()班的技巧。

@雅林:不客气!

@吉恩·伍德:希望你不要介意,我已经恢复了你的编辑。问题是,您实现的内容与OP实际需要的内容不匹配。

@鲁克没问题。我误解了。这是否是解决OP问题的代码示例?:gist.github.com/gene1wood/11386298

为什么不在问题中包括一个完整的示例而不是链接,这是stackoverflow的首选方法?@吉恩·伍德,为什么不用你的全部答案创造一个新的答案呢?

@Joakim当然,这是完整的答案

我很难使用rfc339日期时间格式,但我找到了一个合适的解决方案来在两个方向上转换日期字符串<=>datetimeu对象。

您需要两个不同的外部模块,因为其中一个模块只能在一个方向上进行转换(不幸的是):

第一次安装:

sudo pip install rfc3339

sudo pip install iso8601

然后包括:

import datetime     # for general datetime object handling

import rfc3339      # for date object -> date string

import iso8601      # for date string -> date object

为了不需要记住哪个模块是哪个方向,我编写了两个简单的助手函数:

def get_date_object(date_string):

return iso8601.parse_date(date_string)

def get_date_string(date_object):

return rfc3339.rfc3339(date_object)

在代码中,您可以这样轻松地使用:

input_string = '1989-01-01T00:18:07-05:00'

test_date = get_date_object(input_string)

# >>> datetime.datetime(1989, 1, 1, 0, 18, 7, tzinfo=)

test_string = get_date_string(test_date)

# >>> '1989-01-01T00:18:07-05:00'

test_string is input_string # >>> True

尤里卡!现在,您可以轻松地(哈哈)使用日期字符串和日期字符串的可用格式。

"HueCKA"。失去"H"。

pytz包可用于python 2.x和3.x。它实现了tzinfo的具体子类,以及其他服务,因此您不必这样做。

要添加UTC偏移量:导入日期时间进口吡兹

dt = datetime.datetime(2011, 12, 18, 20, 46, 00, 392227)

utc_dt = pytz.UTC.localize(dt)

现在这个:

print utc_dt.isoformat()

将打印:

2011-12-18T20:46:00.392227+00:00

如果您只需要UTC时区,则不需要pytz模块。定义UTC TZINFO很简单

谢谢。当我需要stdlib解决方案时,我会保存您的答案。UTC只是最短的一个例子。OP没有特别要求。pytz知道所有时区及其DST,我觉得这很有用。

注:在我的回答中,get_localzone()返回与本地时区相对应的时区。

我想它会返回pytz时区。自动更正?

对。应该是"pytz时区",而不是"puts时区"

您确实可以使用内置的日期时间模块。AS卢卡提到,在显示方式的页面。如果你看一下你会的请参阅一个显示许多不同用例的长示例。这是密码您正在寻找,它将生成一个RFC3339 UTC时间戳。

from datetime import tzinfo, timedelta, datetime

import time as _time

ZERO = timedelta(0)

STDOFFSET = timedelta(seconds=-_time.timezone)

if _time.daylight:

DSTOFFSET = timedelta(seconds=-_time.altzone)

else:

DSTOFFSET = STDOFFSET

DSTDIFF = DSTOFFSET - STDOFFSET

class LocalTimezone(tzinfo):

def utcoffset(self, dt):

if self._isdst(dt):

return DSTOFFSET

else:

return STDOFFSET

def dst(self, dt):

if self._isdst(dt):

return DSTDIFF

else:

return ZERO

def tzname(self, dt):

return _time.tzname[self._isdst(dt)]

def _isdst(self, dt):

tt = (dt.year, dt.month, dt.day,

dt.hour, dt.minute, dt.second,

dt.weekday(), 0, 0)

stamp = _time.mktime(tt)

tt = _time.localtime(stamp)

return tt.tm_isdst > 0

Local = LocalTimezone()

d = datetime.now(Local)

print d.isoformat('T')

# which returns

# 2014-04-28T15:44:45.758506-07:00

我刚开始使用的另一个有用的实用程序:用于时区处理和日期分析的dateutil库。推荐,包括这个答案

python什么时候诞生的_关于RFC 3339日期时间:在Python中产生timestamp相关推荐

  1. java 处理 ISO 8601(RFC 3339)时间格式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 java 处理 ISO 8601(RFC 3339)时间格式 前言 一.RFC 3339和ISO 8601是什么? 二.使用 反序列化 ...

  2. python 数组合并排重_并排深度学习:Julia vs Python

    python 数组合并排重 Julia could possibly be the biggest threat to Python. For a variety of applications, J ...

  3. python难度大的题_早看少被坑!Python 最难的问题

    超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...

  4. python构造方法与java区别_一张图秒懂Java和Python的区别,你知道吗?

    对于程序员的语言千千万JAVA\C\C++\PHP\Python不同的程序员使用着不同的语言,做着功能相似需求却不同的产品. 但是最近Python在人工智能的推动下突然出现在人们的面前,其实和Java ...

  5. python程序员年薪百万_想要成为年薪百万的Python程序员,这套面试题别错过

    近几年来,Python的运用范围越来越广,发展势头十分强劲.小到网页建设.网站搭建,大到人工智能AI.云计算.人脸识别.大数据分析等等尖端技术,都基于Python编程语言来实现. 在小伙伴们通过参加培 ...

  6. python手机端编程环境_移动端自动化测试解决方案(Appium + Python) - (1) 环境搭建...

    最近对iOS自动化测试做了一番探究,希望通过自动化测试更好的去提高公司项目的测试效率 .在网上找了很多的文章和相关资料,都因为时间比较久导致无法实现基本环境的搭建,我在这儿分享给大家分享我的实现过程. ...

  7. python有什么用处案例_为什么大家都推荐你学python?看完这5个例子就明白了!...

    为什么大家都推荐你学Python?而不是C语言或者是JAVA呢? 因为-- python很灵活,一定程度上函数也可以传参和注入,所以代码的灵活性要大的多. python自带了函数的curry化以及迟滞 ...

  8. python下载之后无法启动_安装后启动时,适用于Python的Eric IDE崩溃

    On Windows 7 I successfully installed Python 3.73 and then installed Eric 6, the Python IDE. 安装似乎已成功 ...

  9. python必读5本书籍_免费下载!5本从Python入手机器学习的必备电子书!(附链接)...

    大数据文摘授权转载自数据派THU 作者:Richard Gall 编译:车前子.丁楠雅 今天,机器学习已成为软件工程所有领域中最重要的发展趋势之一.这门技术不再局限于研究者和数据分析者,从网络安全到网 ...

最新文章

  1. python完全背包最优_python 完全背包问题_遗传算法Python实战 009.背包问题
  2. Appium环境搭建python篇(mac系统)
  3. dotNET Core 中怎样操作 AD?
  4. datetime默认当前时间_简述Python培训之time和datetime的区别
  5. php百度地图地址解析失败,javascript - vue中使用百度地图 提示无法解析
  6. java的max函数比较三个数_java – 使用泛型创建返回较大函数的max函数
  7. 笔记本安装CentOS环境
  8. 【统计分析】1 P值和Z得分
  9. HTML5期末大作业:京东商城网站设计——京东商城购物网站(4页) 基于Html+Css+javascript的网页制作(购物主题)
  10. 【项目实战】Python基于Django框架实现校园网上一站式购物系统
  11. spark-streaming 编程(一)构建开发环境
  12. java三维动画_基于Java3D的交互式三维动画的研究
  13. 修改Android模拟器中System目录的内容(framework.jar)
  14. 英雄联盟2017赛季什么时候结束?
  15. 效果炸了,Drawable 实现红鲤鱼动画,点哪儿游哪儿(下)
  16. C.Defuse the Bombs(简单二分)
  17. 电容屏分类及优缺点介绍
  18. 已被Windows defender smartscreen阻止
  19. Spark支持三种分布式部署方式
  20. 最近16款免费的Wordpress主题

热门文章

  1. Aop事务小结(事务管理器和自身构建)
  2. 信息管理(Information Management)
  3. cygwin 在 windows 下的安装
  4. 设置MySQL服务的字符集为uft8
  5. 关于Timer的用法,先简单记下,稍后编辑
  6. PHP实现四种基本排序算法
  7. oracle 存储过程(分析理解)
  8. 微信小程序-01-项目组成文件介绍(入门篇)
  9. javaScript中常见的几种报错类型
  10. Vue蚂蜂窝Vue-cli+webpack做的