在我的Django项目中,我正在使用DateTimeField模型.这基本上有python datetime.datetime实例.
从纪元(以秒为单位)转换到时间的最快方法是什么?
我正在研究HighCharts样条不规则数据.这里数据传递为
data: [
[Date.UTC(1970, 9, 27), 0 ],
[Date.UTC(1970, 10, 10), 0.6 ],
[Date.UTC(1970, 10, 18), 0.7 ],
[Date.UTC(1970, 11, 2), 0.8 ],
[Date.UTC(1970, 11, 9), 0.6 ],
[Date.UTC(1970, 11, 16), 0.6 ],
]
Run Code Online (Sandbox Code Playgroud)
但是,我是通过AJAX调用从python后端发送数据的
data: [
"2013-11-07 00:10:27", 0 ],
"2013-11-07 00:10:27", 1 ],
"2013-11-07 00:10:27", 2 ],
"2013-11-07 00:10:27", 3 ],
"2013-11-07 00:10:27", 4 ],
"2013-11-07 00:10:27", 5 ],
]
Run Code Online (Sandbox Code Playgroud)
因此,数据点不会被绘制.如何将日期时间转换为UTC或后端(python)的任何其他日期时间格式,这将使Highcharts能够绘制正确的X和Y轴点.
这是我尝试过的.由于UTC时间Date.UTC(1970, 9, 27)返回秒数,因此我将时间转换为自幕后1970-1-1以来经过的总秒数.
time = "2013-11-06 18:00:00"
time = ((datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S'))-datetime.datetime(1970,1,1)).total_seconds()
Run Code Online (Sandbox Code Playgroud)
然后将其传递给UI.因此我的数据发送为
[[1383760800.0, 1870.2000000000007], …
来自http://docs.python.org/library/time.html:
time.mktime(t):这是localtime()的反函数.它的参数是struct_time或完整的9元组(因为需要dst标志;如果它是未知的,则使用-1作为dst标志),它以本地时间而不是UTC表示时间.它返回一个浮点数,以便与time()兼容.如果输入值不能表示为有效时间,则会引发OverflowError或ValueError(这取决于Python或底层C库是否捕获到无效值).它可以生成时间的最早日期取决于平台.
这表示您需要在当地时间而不是UTC指定时间元组.但是,我想用UTC指定; 我不想在盒子上使用本地时区.
有什么方法可以从datetime到时间戳,其中时间被视为UTC?当我转换为时间戳和从时间戳转换时,我希望能够将所有内容保存在规范化的UTC表单(datetime对象)中.
我希望能够做这样的事情,让x和y出现相同:
y = datetime.datetime.utcfromtimestamp(time.mktime(x.timetuple()))
x = dateutil.parser.parse('Wed, 27 Oct 2010 22:17:00 GMT')
stamp = time.mktime(x.timetuple())
y = datetime.datetime.utcfromtimestamp(stamp)
x
datetime.datetime(2010, 10, 27, 22, 17, tzinfo=tzutc())
y
datetime.datetime(2010, 10, 28, 6, 17)
Run Code Online (Sandbox Code Playgroud) 我希望分析与天气数据相关的交通流量。交通数据有一个 UNIX 时间戳(又名纪元),但我在将时间戳(在天气数据中)转换为纪元时遇到了麻烦。问题是我在挪威,天气数据中的 UTC 时间戳与我不在同一时区(GMT+1)。
我最初的做法
我首先尝试将其转换为纪元并将数据视为 GMT+1 时区。然后我通过减去 UTC 和 GMT+1 之间的秒数差异进行补偿。
方法的问题
我首先意识到这种方法非常原始而且不是很优雅(实际上它充其量只是一个丑陋的黑客)。然而,这里最大的问题是 UTC 和 GMT+1 之间的差异不是恒定的(由于夏令时)。
题
是否有任何可靠的方法可以将 UTC 时间转换为 python 中的 UNIX 时间戳(考虑到我的机器处于 GMT+1)?时间戳采用以下格式:
Y-m-d HH:MM:SS
编辑:尝试过 rmunns 的解决方案:
def convert_UTC_to_epoch(timestamp):
tz_UTC = pytz.timezone('UTC')
time_format = "%Y-%m-%d %H:%M:%S"
naive_timestamp = datetime.datetime.strptime(timestamp, time_format)
aware_timestamp = tz_UTC.localize(naive_timestamp)
epoch = aware_timestamp.strftime("%s")
return (int) (epoch)
Run Code Online (Sandbox Code Playgroud)
这不能正常工作,如下所示:
#Current time at time of the edit is 15:55:00 UTC on June 9th 2014.
>>> diff …Run Code Online (Sandbox Code Playgroud) 我想将 UTC TimeDate 标记字符串转换为毫秒的整数值(可能需要是 64 位数量),以便在存储在 mySQL 数据库列中时占用更少的空间。这个 UTC 字符串是从另一个库生成的,我将它存储为一种每用户 GUID。
datetime 或 dateutil 能否将其转换为单个整数值(例如“自纪元以来的毫秒数”)?还是我需要自己做?
使用这种方法解析:
myDateTime = dateutil.parser.parse("2015-06-27T02:10:05.653000Z")
print("Parsed datetime String is {0}, ordinal value is {1}".format(myDateTime, myDateTime.toordinal()))
Run Code Online (Sandbox Code Playgroud)
给出输出:
Parsed datetime String is 2015-06-27 02:10:05.652999+00:00, ordinal value is 735776
Run Code Online (Sandbox Code Playgroud)
...它只给出日期的序数值。此外,如果我有一个整数 653 毫秒的时间,那么我希望解析的对象知道它有 653 毫秒,而不是 652999。
python程序如下,报错:
文件“C:\Python\PyCharmProject\FaceBookCrawl\group_download.py”,第 31 行,在 getFeed 参数中 += "&since=" + SINCE.strftime("%s")
ValueError: Invalid format string
程序好像SINCE.strftime("%s")错了,怎么解决?
SINCE = datetime.datetime.now() - datetime.timedelta(DAYS)
params = "?fields=permalink_url,from,story,type,message,link,created_time,updated_time,likes.limit(0).summary(total_count),comments.limit(0).summary(total_count)"
#Default paging limit
params += "&&limit=" + DEFAULT_LIMIT
#Time-based limit
params += "&since=" + SINCE.strftime("%s")
graph_url = GRAPH_URL_PREFIX + group + "/feed" + params
Run Code Online (Sandbox Code Playgroud)