从用户输入的日期创建DateTime
我刚接触Python和App Engine,想做的是存储一个包含日期属性的模型,而这个日期属性是用户在网页表单中输入的日期。
我的模型是:
class Memory(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateProperty()
然后我用以下方式创建一个实例:
memory = Memory()
memory.author = users.get_current_user()
memory.content = self.request.get('content')
但是一旦我尝试处理这个日期值,就出问题了。我假设并输入的日期格式是:2009-07-21。
我尝试过:
memory.date = time.strptime(self.request.get('date'), '%Y-%m-%d')
memory.date = db.DateProperty(self.request.get('date'))
memory.date = self.request.get('date') (wishful thinking I guess)
还有一些我现在甚至记不起来的其他选项。每次尝试都导致ImportError,并且有一个很长的错误信息,最后显示:
: 没有名为_multiprocessing的模块 args = ('没有名为_multiprocessing的模块',) message = '没有名为_multiprocessing的模块'
我对此完全不知所措。
我之前用PHP的时候,strtotime()是我的魔法函数,可以帮我处理所有的转换,而date()函数可以处理其他格式化的事情。现在我看到一些内联的lambda(??)函数等等。
我到底错过了什么,看起来这么简单的事情。
3 个回答
0
是的,PHP的用法要好很多。我正在使用这个库。
http://labix.org/python-dateutil
>>> import dateutil.parser
>>> dateutil.parser.parse("may 2 1984")
datetime.datetime(1984, 5, 2, 0, 0)
0
你说得对,使用 strptime 是正确的:
>>> dt = time.strptime('2009-07-21', '%Y-%m-%d')
>>> dt
time.struct_time(tm_year=2009, tm_mon=7, tm_mday=21, tm_hour=0, tm_min=0, tm_sec
=0, tm_wday=1, tm_yday=202, tm_isdst=-1)
>>>
你得到了一个结构体,可以被其他函数使用。例如,可以用来以月/日/年(M/D/Y)的格式显示日期:
>>> time.strftime('%m/%d/%Y', dt)
'07/21/2009'
另一个例子(导入 datetime 模块):
>>> dt = datetime.datetime.strptime('2009-07-21', '%Y-%m-%d')
>>> td = datetime.timedelta(days=20)
>>> dt+td
datetime.datetime(2009, 8, 10, 0, 0)
0
也许你用错了类?我不太确定你的模型应该用什么类型。
不过你可以试试:
from datetime import datetime
myValue = datetime.strptime(self.request.get('date'), '%Y-%m-%d')
我在MySQL中使用datetime对象,配合MySQLdb(还有一个datetime字段)。
...同样你也可以试试
from datetime import datetime
myValue = datetime.strptime(self.request.get('date'), '%Y-%m-%d').date()
(注意最后的[obj].date())