Python,获取特定时区的时间戳

Python,获取特定时区的时间戳,python,time,timestamp,Python,Time,Timestamp,我是Python新手,我试图从现有的帖子中找到答案,我做了尝试,但找不到我想要的 当客户端向我的服务器发送请求时,我需要验证时间(基于中国时区,无论客户端在哪里) 从我能找到的现有帖子中,我尝试过: import calendar import datetime import pytz import time tz = pytz.timezone('Asia/Shanghai') # china timezone cn_time = datetime.datetime.now(tz) # ge

我是Python新手,我试图从现有的帖子中找到答案,我做了尝试,但找不到我想要的

当客户端向我的服务器发送请求时,我需要验证时间(基于中国时区,无论客户端在哪里)

从我能找到的现有帖子中,我尝试过:

import calendar
import datetime
import pytz
import time

tz = pytz.timezone('Asia/Shanghai') # china timezone
cn_time = datetime.datetime.now(tz) # get datetime for china
print calendar.timegm(cn_time.timetuple())*1000 #try to get the milliseconds 
但我发现结果与java服务器的答案相差甚远:

一个测试用例是:

python:1457005502000

爪哇:1456976702999

seonds diff from
int secDiff=Seconds.Seconds中间(dt,serverDt).getSeconds()is-28799,即-7小时


注意:我的机器位于中国时区。

您的代码尝试查找当前Unix时间。该值不取决于特定的时区(在所有具有同步(例如,使用ntp)时钟的计算机上,无论它们使用什么(可能不同)时区,该值都是相同的数字)。只需调用
milis=time.time()*1000
,即可获得与java服务器相同的值

如果您需要获取与给定的时区感知日期时间相对应的Unix时间(例如在某个时间点由
datetime.now(tz)
创建),那么只需调用
posix\u timestamp=cn\u time.timestamp()

Python 2上没有
datetime.timestamp()
方法。您可以轻松地模仿它:

def timestamp(aware_dt, epoch=datetime(1970, 1, 1, tzinfo=pytz.utc)):
    return (aware_dt - epoch).total_seconds()

用法:
posix\u timestamp=时间戳(cn\u time)
。有关更多详细信息,请参阅。

您在每种情况下都得到了什么?@Selcuk,请检查我的更新问题您的问题不清楚。你是说你想要
time.time()
?你的意见是什么?它是一根绳子吗?举个例子。java服务器的输出是否与客户端发送的请求有关?什么是客户端的时区?
milis=time.time()*1000
取决于本地时区,但如果客户端位于非中国时区,我需要的是获取时间戳,即亚洲/上海。@Jaskey:错误。POSIX timestamp是自1970-01-01 00:00:00UTC(历元)起不计算闰秒的秒数。无论当地时区如何,它在世界各地都是相同的值。按照链接阅读更详细的答案(按照答案中的链接获得更多细节)。请看答案中明确的公式。很抱歉遗漏了一些要点,我发现你的第一段只是为了指出我的错误,这确实不是我想要的,我想要的是一个时区感知的日期时间戳。我想知道@Selcuk给出的答案是否正确
time.mktime(cn_time.timetuple())*1000
,因为我将该值与我的服务器进行比较,结果非常接近(仅几毫秒差异)@Jaskey 1-selcuk的答案完全错误(它产生垃圾)。2-如果您不希望Joda的
getMillis()
返回值,请编辑您的问题并准确指定您需要的内容。我想要的是验证时差。因为客户端可能在任何地方,所以我们需要比较中国时区时间。在服务器端,我们使用joda来获取时间戳,在客户端,我们从param发送的客户端获取时间戳,并对其进行比较。因此,一句话,“中国时区感知日期时间”是我在python中需要的。那么为什么
time.mktime(cn_time.timetuple())*1000
是错误的,因为它甚至与服务器时间相同(除了从客户端到服务器的一些时间开销)。?
def timestamp(aware_dt, epoch=datetime(1970, 1, 1, tzinfo=pytz.utc)):
    return (aware_dt - epoch).total_seconds()