我正在实现预定发布对象的功能.用户选择发布时间,我创建了一个每分钟运行的cron任务,并检查是否是发布的时间.
用户来自不同的时区.
所以我需要比较两个日期时间:
>>user_chosen_time
datetime.datetime(2012, 12, 4, 14, 0, tzinfo=tzinfo(120))
>>curdate=datetime.datetime.now()
datetime.datetime(2012, 12, 4, 18, 4, 20, 17340)
>>user_chosen_time==curdate
*** TypeError: can't compare offset-naive and offset-aware datetimes
Run Code Online (Sandbox Code Playgroud)
抱歉相当愚蠢的问题,但我需要讨论这个问题.谢谢
我正在尝试解析RSS提要.Feed中的条目包含以下日期元素:
<dc:date>2016-09-21T16:00:00+02:00</dc:date>
Run Code Online (Sandbox Code Playgroud)
使用feedparser,我尝试:
published_time = datetime.fromtimestamp(mktime(entry.published_parsed))
Run Code Online (Sandbox Code Playgroud)
但问题是我似乎得到了存储在数据库中的错误时间.在这种特殊情况下,日期时间存储为:
2016-09-21 13:00:00
Run Code Online (Sandbox Code Playgroud)
...当我期望14:00 - 正确的UTC时间.
我认为问题出在我们的django设置中,我们有:
TIME_ZONE = 'Europe/Berlin'
Run Code Online (Sandbox Code Playgroud)
因为当我切换到:
TIME_ZONE = 'UTC'
Run Code Online (Sandbox Code Playgroud)
...数据时间存储为正确的UTC时间:
2016-09-21 14:00:00
Run Code Online (Sandbox Code Playgroud)
有没有办法保持django设置不变,但要正确解析和存储这个日期时间,而不会影响django时区设置?
编辑:也许这样更清楚......
print entry.published_parsed
published_time = datetime.fromtimestamp(mktime(entry.published_parsed))
print published_time
localized_time = pytz.timezone(settings.TIME_ZONE).localize(published_time, is_dst=None)
print localized_time
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=21, tm_hour=14, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=265, tm_isdst=0)
2016-09-21 15:00:00
2016-09-21 15:00:00+02:00
Run Code Online (Sandbox Code Playgroud) 我将日期作为字符串获取,然后将其解析为 datetime 对象。有什么方法可以检查对象的日期格式是什么?
假设这是我正在创建的对象:
modified_date = parser.parse("2015-09-01T12:34:15.601+03:00")
Run Code Online (Sandbox Code Playgroud)
我如何打印或获取此对象的确切日期格式,我需要它以验证它的格式是否正确,因此我将能够对今天的日期和给定的日期进行比较。
关于确保日期时间是特定时区有很多答案。例如,您可以确保您的日期时间是 UTC
from datetime import datetime
import pytz
now_utc = datetime.utcnow()
Run Code Online (Sandbox Code Playgroud)
产生:
日期时间. 日期时间(2017, 5, 11, 17, 37, 5, 602054)
您可以使该日期时间了解其时区(例如,断言两个不同的日期时间对象来自同一时区)
now_utc_aware = datetime.now(pytz.utc)
Run Code Online (Sandbox Code Playgroud)
datetime.datetime(2017, 5, 11, 17, 38, 2, 757587, tzinfo=< UTC>)
但是,当我从时区感知的日期时间中提取日期时,我似乎失去了时区感知。
now_utc_aware.date()
Run Code Online (Sandbox Code Playgroud)
日期时间.日期(2017, 5, 11)
有趣的是,有一个 SO 问题似乎正是在问这个问题,并且特别是关于日期(datetime.today()),但答案(包括已接受的答案)与日期时间相关。我见过的为日期时间添加时区感知的代码似乎都会在我的datetime.date对象上引发错误。
是否可以向日期对象添加时区感知?
如何从 MongoDB 集合中时间 (HH:MM:SS.Milisecond) 值大于零的日期字段中选择记录,并通过保留日期将时间 (HH:MM:SS) 值更新为零值与 Python 脚本中的现有值相同吗?
当前数据如下所示 -
1) "createdDate" : ISODate("2015-10-10T00:00:00Z")
2) "createdDate" : ISODate("2015-10-11T00:00:00Z")
3) "createdDate" : ISODate("2015-10-12T00:00:00Z")
4) "createdDate" : ISODate("2015-10-13T01:04:30.515Z")
5) "createdDate" : ISODate("2015-10-14T02:05:50.516Z")
6) "createdDate" : ISODate("2015-10-15T03:06:60.517Z")
7) "createdDate" : ISODate("2015-10-16T04:07:80.518Z")
Run Code Online (Sandbox Code Playgroud)
如何在 Python 脚本中使用仅选择第 4、5、6 和 7 行mongodbsql并将其更新为时间戳为零?
更新后,数据将如下所示 -
1) "createdDate" : ISODate("2015-10-10T00:00:00Z")
2) "createdDate" : ISODate("2015-10-11T00:00:00Z")
3) "createdDate" : ISODate("2015-10-12T00:00:00Z")
4) "createdDate" : ISODate("2015-10-13T00:00:00Z")
5) "createdDate" : ISODate("2015-10-14T00:00:00Z")
6) "createdDate" : ISODate("2015-10-15T00:00:00Z")
7) "createdDate" : ISODate("2015-10-16T00:00:00Z")
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,我已使用解析转换为日期时间对象.
time = 'Tue, 30 Sep 2014 16:19:08 -0700 (PDT)'
date_object = parse(time)
Run Code Online (Sandbox Code Playgroud)
我想找到从那时起已经过去的时间.我尝试使用datetime.datetime.now()和减去这两个,但它们是不同的格式,并抛出一个错误.
做这个的最好方式是什么?
python ×6
datetime ×4
date ×1
django ×1
feedparser ×1
mongodb ×1
pymongo ×1
python-2.7 ×1
pytz ×1
timezone ×1