我正在与远程服务器交互。此远程服务器位于不同的时区。部分身份验证要求我制作:
"自1970年1月1日00:00:00 GMT以来的秒数服务器只接受时间戳为在当前时间的600秒内"
erlang:now()
。显示它可以给我CCD_ 2。它返回一个size=3
元组{MegaSecs, Secs, MicroSecs}
。我尝试使用element(2,erlang:now())
,但远程服务器向我发送了以下消息:
时间戳过期:给定时间戳(1970-01-07T1:44:42Z)不在服务器时间的600秒内(2012-01-26T09:51:26Z)自1970年1月1日以来,这3个参数中的哪一个是所需的秒数?我做什么不对?我是否与
calendar:universal_time() ?
中的universal time
有什么关系?
UPDATE
作为更新,我使用以下方法关闭了超时问题:
seconds_1970()->T1={{1970,1,1},{0,0,0}},T2=日历:universal_time(),{天,{HH,Mins,Secs}}=日历:时间差(T1,T2),(天*24*60*60)+(HH*60*600)+(分钟*60)+Secs。然而,问题仍然存在。必须有一种方法,一种基本的二郎方法,可能是BIF,对吧?
您必须根据now()
的结果计算UNIX时间(自1970年以来的秒数),如下所示:
{MegaSecs, Secs, MicroSecs} = now().
UnixTime = MegaSecs * 1000000 + Secs.
只要使用元组的第二个条目,就会告诉您自上一个十进制万亿元以来的时间(以秒为单位,自UNIX epoch以来)。
【2017编辑】不赞成使用now
,但erlang:timestamp()
不是,并且返回与now
相同的格式。
这3个参数中的哪一个是自1970年1月1日以来所需的秒数?
他们三个人,加在一起。查看给定的时间戳。现在是1970年1月7日。假定Secs
将在0(包括0)和1000000(不包括)之间。一百万秒只有11.574天。你需要使用兆秒和秒。由于容错为600秒,因此可以忽略erlang:now()
响应的微秒部分。