我正在处理Python中的日期,我需要将它们转换为UTC时间戳,以便在Javascript中使用.以下代码不起作用:
>>> d = datetime.date(2011,01,01)
>>> datetime.datetime.utcfromtimestamp(time.mktime(d.timetuple()))
datetime.datetime(2010, 12, 31, 23, 0)
Run Code Online (Sandbox Code Playgroud)
将日期对象首先转换为datetime也无济于事.我试过这个链接的例子,但是:
from pytz import utc, timezone
from datetime import datetime
from time import mktime
input_date = datetime(year=2011, month=1, day=15)
Run Code Online (Sandbox Code Playgroud)
现在要么:
mktime(utc.localize(input_date).utctimetuple())
Run Code Online (Sandbox Code Playgroud)
要么
mktime(timezone('US/Eastern').localize(input_date).utctimetuple())
Run Code Online (Sandbox Code Playgroud)
确实有效.
所以一般的问题:如何根据UTC获得自纪元以来转换为秒的日期?
我现在能想到的最好的就是这种怪异:
>>> datetime.utcnow() \
... .replace(tzinfo=pytz.UTC) \
... .astimezone(pytz.timezone("Australia/Melbourne")) \
... .replace(hour=0,minute=0,second=0,microsecond=0) \
... .astimezone(pytz.UTC) \
... .replace(tzinfo=None)
datetime.datetime(2008, 12, 16, 13, 0)
Run Code Online (Sandbox Code Playgroud)
即,用英语,获取当前时间(以UTC为单位),将其转换为其他时区,将时间设置为午夜,然后转换回UTC.
我不只是使用now()或localtime(),因为它会使用服务器的时区,而不是用户的时区.
我不禁感到我错过了什么,有什么想法吗?
我在玩 Google App Engine,我了解到时区固定为 UTC。我想确定用户本地时区当天的开始和结束时间。所以基本上,给定 UTC 的当前时间,您如何确定当天的开始和结束时间,同时考虑到夏令时转换。
我有一些笨重的示例代码。请注意,我意识到如果我手动指定日期,我也可以指定明天的日期,但它们是示例,我想以编程方式确定它。我的主要问题是,如果我将 timedelta 添加到带有时区的日期时间,然后对其进行标准化(就像 pytz 文档中所建议的那样),我会得到一个日期时间,在夏令时切换期间关闭一小时。
代码中没有提到,但最终目的是将这些时间转换回 UTC,这就是为什么了解时区很重要的原因。
#!/usr/bin/python
import datetime
from pytz.gae import pytz
hobart_tz = pytz.timezone('Australia/Hobart')
utc_dt = pytz.utc.localize(datetime.datetime.utcnow())
hobart_dt = utc_dt.astimezone(hobart_tz)
# create a new datetime for the start of the day and add a day to it to get tomorrow.
today_start = datetime.datetime(hobart_dt.year, hobart_dt.month, hobart_dt.day)
today_start = hobart_tz.localize(today_start)
today_end = hobart_tz.normalize(today_start + datetime.timedelta(days=1))
print 'today:', today_start
print ' next:', today_end
print
# gives:
# today: 2011-08-28 00:00:00+10:00
# next: 2011-08-29 …Run Code Online (Sandbox Code Playgroud) 我有一个从数据库中获取的日期时间,这个日期时间是一个 UTC 日期时间。但是当我从数据库中提取它时,它不知道时区。我需要做的是将此日期时间转换为另一个函数的“纪元秒数”时间。问题在于,系统的时间在 PST 中,由于特定原因我无法更改它。
所以,我想要做的是,获取我从数据库中获得的这个日期时间,并告诉 python 这个日期时间是一个 UTC 日期时间。我所做的每一种方式都会导致它因时区转换而失去时间或获得时间。同样,不是试图转换时间,只是试图指定它是 UTC。
如果有人可以帮助解决这个问题,那就太好了。
谢谢!
例子
假设 database_function() 返回的日期时间数据类型为 '2013-06-01 01:06:18'
datetime = database_function()
epoch = datetime.strftime('%s')
pytz.utc.localize(database_function()).datetime.strftime('%s')
datetime.replace(tzinfo=pytz.utc).datetime.strftime('%s')
Run Code Online (Sandbox Code Playgroud)
这两个都返回 1370077578 的纪元时间戳但是,它应该返回每个http://www.epochconverter.com/的时间戳 1370048778请 记住,这个时间戳是一个 UTC 时间戳
我想知道是否有任何方法可以获取某一天开始时的 UNIX 时间戳,即给定时区的每一天的午夜时间戳。
最好不依赖其他 pip 模块。