从用户输入的日期创建DateTime

0 投票
3 回答
858 浏览
提问于 2025-04-15 13:02

我刚接触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())

撰写回答