从用户输入的日期创建DateTime

时间:2009-07-21 07:47:48

标签: python datetime

我对Python和App Engine很陌生,但我要做的是存储一个包含DateProperty的模型,并且DateProperty填充了用户在Web表单中输入的日期。

我有以下型号:

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 :(得分: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'

另一个例子(导入日期时间模块):

>>> dt = datetime.datetime.strptime('2009-07-21', '%Y-%m-%d')
>>> td = datetime.timedelta(days=20)
>>> dt+td
datetime.datetime(2009, 8, 10, 0, 0)

答案 1 :(得分:0)

是的,PHP更好。我正在使用这个库

http://labix.org/python-dateutil

>>> import dateutil.parser
>>> dateutil.parser.parse("may 2 1984")
datetime.datetime(1984, 5, 2, 0, 0)

答案 2 :(得分:0)

也许你正在使用错误的课程?我不确定你的模型应该采用什么类型

但请尝试:

from datetime import datetime

myValue = datetime.strptime(self.request.get('date'), '%Y-%m-%d')

我在MySQL中使用带有MySQLdb的日期时间对象(以及日期时间字段)

...同样你可以尝试

from datetime import datetime

myValue = datetime.strptime(self.request.get('date'), '%Y-%m-%d').date()

(注意最后的[obj] .date())