我正在处理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获得自纪元以来转换为秒的日期?
为这个简单的问题道歉...我是Python的新手...我已经四处寻找,似乎没有任何工作.
我有一堆日期时间对象,我想计算自过去一个固定时间以来每秒的秒数(例如自1970年1月1日以来).
import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)
Run Code Online (Sandbox Code Playgroud)
这似乎只是区分具有不同日期的日期:
t.toordinal()
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.
我从来没有把时间转换成UTC.最近有一个请求要让我的应用程序能够识别时区,而且我一直在圈子里跑.关于将本地时间转换为UTC的大量信息,我发现它相当基本(也许我也做错了),但我找不到任何有关将UTC时间轻松转换为最终用户时区的信息.
简而言之,Android应用程序向我发送(appengine app)数据,在该数据中是一个时间戳.要将时间戳存储到我正在使用的时间:
datetime.utcfromtimestamp(timestamp)
Run Code Online (Sandbox Code Playgroud)
这似乎有效.当我的应用程序存储数据时,它将提前5小时存储(我是EST -5)
数据存储在appengine的BigTable上,当检索到它时,它就像一个字符串一样:
"2011-01-21 02:37:21"
Run Code Online (Sandbox Code Playgroud)
如何在用户正确的时区将此字符串转换为DateTime?
此外,用户时区信息的推荐存储是什么?(你怎么通常存储TZ信息,即:"-5:00"或"EST"等等等等),我敢肯定的答案,我的第一个问题可能包含一个参数的回答第二个.
我有一个使用datetime.utcnow()创建并保存在数据库中的python datetime实例.
为了显示,我想使用默认的本地时区将从数据库检索的日期时间实例转换为本地日期时间(即,就像使用datetime.now()创建日期时间一样).
如何仅使用python标准库将UTC日期时间转换为本地日期时间(例如,没有pytz依赖项)?
似乎一个解决方案是使用datetime.astimezone(tz),但是如何获得默认的本地时区?
我似乎很难理解这一点.
calendar.timegm()和之间有什么区别time.mktime()?
假设我datetime.datetime没有连接tzinfo,两个不应该给出相同的输出吗?难道他们都没有给出纪元和作为参数传递的日期之间的秒数?而且由于传递的日期没有tzinfo,那个秒数不一样吗?
>>> import calendar
>>> import time
>>> import datetime
>>> d = datetime.datetime(2010, 10, 10)
>>> calendar.timegm(d.timetuple())
1286668800
>>> time.mktime(d.timetuple())
1286640000.0
>>>
Run Code Online (Sandbox Code Playgroud) 我们可以使用time.tzname获取本地时区名称,但该名称与之不兼容pytz.timezone.
实际上,返回的名称time.tzname含糊不清.此方法('CST', 'CST')在我的系统中返回,但"CST"可以指示四个时区:
我有一个python datetime对象,我想转换为UTC.我计划以RFC 2822格式输出它以放入HTTP标头,但我不确定这对于这个问题是否重要.我在这个网站上找到了一些关于转换时间对象的信息,它看起来更简单,但这次我真的想使用datetime对象,因为我使用timedeltas来调整它们:
我试过这样的事情:
from datetime import datetime, timedelta
now = datetime.now()
fiveMinutesLater = datetime.now() + timedelta(minutes=5)
fiveMinutesLaterUtc = ???
Run Code Online (Sandbox Code Playgroud)
时间或日期时间模块中的任何内容看起来都不会对我有所帮助.看起来我可以通过将datetime对象传递给3或4个函数来实现它,但我想知道是否有更简单的方法.
我宁愿不使用第三方模块,但我可能会认为它是唯一合理的选择.
从字符串获取日期时间的函数datetime.strptime(date_string, format)需要字符串格式作为第二个参数.有没有办法从字符串构建日期时间而不知道确切的格式,并让Python最好猜测它?
python的时间模块似乎有点杂乱无章.例如,以下是docstring中的方法列表:
time() -- return current time in seconds since the Epoch as a float
clock() -- return CPU time since process start as a float
sleep() -- delay for a number of seconds given as a float
gmtime() -- convert seconds since Epoch to UTC tuple
localtime() -- convert seconds since Epoch to local time tuple
asctime() -- convert time tuple to string
ctime() -- convert time in seconds to string
mktime() -- convert local time tuple to seconds since …Run Code Online (Sandbox Code Playgroud) 我有一个带有字符串格式的时区信息的时间戳,我想将其转换为使用我的本地时区显示正确的日期/时间.所以对于例如......我有
timestamp1 = 2011-08-24 13:39:00 +0800
Run Code Online (Sandbox Code Playgroud)
我想将此转换为时区偏移+1000到dsiplay
timestamp2 = 2011-08-24 15:39:00 +1000
Run Code Online (Sandbox Code Playgroud)
我尝试过使用pytz但是找不到很多显示如何使用偏移信息的例子.我对计算器展示了这个确切的问题找到一个其他的链接是这里.我希望有一些更好的方法可以使用pytz处理这个问题.感谢提前的所有建议:).
UPDATE
谢谢Cixate.我刚刚找到了与你的解决方案非常相似的解决方案.发现这些链接很有用 - LINK1和LINK2
为每个人发布解决方案都会带来好处
from datetime import datetime
import sys, os
import pytz
from dateutil.parser import parse
datestr = "2011-09-09 13:20:00 +0800"
dt = parse(datestr)
print dt
localtime = dt.astimezone (pytz.timezone('Australia/Melbourne'))
print localtime.strftime ("%Y-%m-%d %H:%M:%S")
2011-09-09 15:20:00
Run Code Online (Sandbox Code Playgroud)