2015-08-24 122 views
0

我想调查如何找到这些数字,但老实说,我一直在网上找到的答案一直困扰着我。我试图弄清楚如何获得今天开始的时间,以及最近的星期一。获取本周的星期一和今天的Python开始的UNIX时间戳

我读了time.time(),但是这给了我现在的时间。

+0

你是指日期吗? –

+0

“今天的开始”是什么意思?当地时间只是午夜,还是更复杂的东西? –

+0

你的意思是utime(1970年的时间)? – Zohar81

回答

0

我倾向于使用datetime,那么您可以很容易地将其转换为时间戳:How to convert a Python datetime object to seconds

为了得到今天的日期,在本地时间设置为零(午夜)时间:

today = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) 

如果你这样做,你可能会想转换为时间戳之前的时区转换为UTC。如果您希望在UTC采用午夜:

today_utc = datetime.datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0) 

现在要调整到星期一,您需要知道这一周的哪一天。轻而易举地有使用0为周一weekday方法,让你可以减去:

monday = today - datetime.timedelta(days=today.weekday()) 
+0

将代表本地时间的朴素datetime对象转换为Unix时间戳并不容易:第一个答案不合适,第二个答案不可移植。阅读[我的意见](http://stackoverflow.com/q/7852855/4279)和[那里的答案](http://stackoverflow.com/a/32192894/4279)。 – jfs

+0

@ J.F.Sebastian我知道我在关于将本地时间转换为UTC的部分上做了一些小动作,但是什么使它不适合?我希望OP能回来并澄清这个问题。 –

+0

“不适合”是关于您提供的链接的第一个答案,该链接使用仅与utc时间一起工作的公式,而不提及该事实。 – jfs

0

像这样的东西应该让你的Unix时间戳今天午夜在您的本地时区:

today = datetime.date.today() 
time.mktime((today.year, today.month, today.day, 0, 0, 0, 0, 0, 0)) 

这应该让你半夜在星期一,因为星期一被认为是一周中的0天:

monday = today + datetime.timedelta(days=-today.weekday()) 
time.mktime((monday.year, monday.month, monday.day, 0, 0, 0, 0, 0, 0)) 
+0

如果mktime()无法访问给定平台上的历史时区数据库,它可能会因过去的日期而失败。便携式解决方案可以[使用基于pytz的解决方案](http://stackoverflow.com/a/32192987/4279) – jfs

0

在Python中获取今天开始的UNIX时间戳

请参阅How do I get the UTC time of “midnight” for a given timezone?以获取表示午夜的知晓日期时间对象。若要从该对象获得Unix时间戳,调用其.timestamp() method.

获取本周星期一的UNIX时间戳

的代码几乎同为周一的时间戳:

from datetime import datetime, time, timedelta 
import tzlocal # $ pip install tzlocal 

local_timezone = tzlocal.get_localzone() 
today = datetime.now(local_timezone).date() 
monday = today - timedelta(today.weekday()) 
dt = local_timezone.localize(datetime.combine(today, time.min), is_dst=None) 
unix_time = dt.timestamp() 

如果您需要.timestamp() <的实现3.3 Python版本,请参阅Converting datetime.date to UTC timestamp in Python

相关问题