如果您不想使用以外的任何其他模块,此答案应该会有所帮助datetime
。
datetime.utcfromtimestamp(timestamp)
返回一个天真的datetime
对象(不是一个有意识的对象)。知道的人知道时区,而天真的人则不知道。如果要在时区之间(例如,UTC与本地时间之间)进行转换,则需要一个有意识的人。
如果不是实例化开始日期的人,但仍可以datetime
在UTC时间创建一个天真的对象,则可能需要尝试使用以下Python 3.x代码对其进行转换:
import datetime
d=datetime.datetime.strptime("2011-01-21 02:37:21", "%Y-%m-%d %H:%M:%S") #Get your naive datetime object
d=d.replace(tzinfo=datetime.timezone.utc) #Convert it to an aware datetime object in UTC time.
d=d.astimezone() #Convert it to your local timezone (still aware)
print(d.strftime("%d %b %Y (%I:%M:%S:%f %p) %Z")) #Print it with a directive of choice
注意不要误认为如果您的时区当前是MDT,则夏令时不适用于上述代码,因为它会打印MST。您会注意到,如果您将月份更改为8月,它将打印MDT。
获取感知datetime
对象的另一种简便方法(也是在Python 3.x中)是使用指定的时区开始创建对象。这是使用UTC的示例:
import datetime, sys
aware_utc_dt_obj=datetime.datetime.now(datetime.timezone.utc) #create an aware datetime object
dt_obj_local=aware_utc_dt_obj.astimezone() #convert it to local time
#The following section is just code for a directive I made that I liked.
if sys.platform=="win32":
directive="%#d %b %Y (%#I:%M:%S:%f %p) %Z"
else:
directive="%-d %b %Y (%-I:%M:%S:%f %p) %Z"
print(dt_obj_local.strftime(directive))
如果您使用Python 2.x,则可能必须继承datetime.tzinfo
并使用它来帮助您创建感知datetime
对象,因为datetime.timezone
Python 2.x中不存在该对象。