日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/5/22 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python什么时候诞生的_关于RFC 3339日期时间:在Python中产生timestamp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在嘗試在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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。