我正在与远程服务器进行交互。此远程服务器位于不同的时区。部分身份验证要求我生成:
"The number of seconds since January 1, 1970 00:00:00 GMT The server will only accept requests where the timestamp is within 600s of the current time"
erlang:now()
的文档。揭示它可以让我the elapsed time since 00:00 GMT, January 1, 1970 (zero hour)
on the assumption that the underlying OS supports this
。它返回size=3
元组{MegaSecs, Secs, MicroSecs}
。我尝试使用element(2,erlang:now())
,但远程服务器向我发送以下消息:
Timestamp expired: Given timestamp (1970-01-07T14:44:42Z) not within 600s of server time (2012-01-26T09:51:26Z)这三个参数中的哪一个是自1970年1月1日以来所需的秒数?我做的不对吗?我是否有
universal time
与calendar:universal_time() ?
更新有关的事项作为更新,我设法通过使用以下方法关闭过期问题:seconds_1970()-> T1 = {{1970,1,1},{0,0,0}}, T2 = calendar:universal_time(), {Days,{HH,Mins,Secs}} = calendar:time_difference(T1,T2), (Days * 24 * 60 * 60) + (HH * 60 * 60) + (Mins * 60) + Secs.但问题仍然存在。必须有一种方法,一种基本的Erlang方式来获得这个,可能是BIF,对吗?
答案 0 :(得分:6)
您必须从now()
的结果计算UNIX时间(自1970年以来的秒数),如下所示:
{MegaSecs, Secs, MicroSecs} = now().
UnixTime = MegaSecs * 1000000 + Secs.
只需使用元组的第二个条目就会告诉你自上一个十进制trillionellium以来的秒数(自UNIX纪元以来的秒数)。
[2017年编辑]
不推荐使用now
,但erlang:timestamp()
不是,并返回与now
相同的格式。
答案 1 :(得分:3)
这三个参数中的哪一个是自1970年1月1日以来所需的秒数?
所有这三个人,统称。查看给定的时间戳。它是1970年1月7日。据推测,Secs
将在0(包括)和1,000,000(不包括)之间。一百万秒只有11.574天。您需要使用megaseconds和秒。由于误差容限为600秒,您可以忽略来自erlang:now()
的响应的微秒部分。