【问题标题】:How to allow users to pick dates using Python如何允许用户使用 Python 选择日期
【发布时间】:2013-12-09 08:13:48
【问题描述】:

我是 Python 新手,为了这个解决方案已经到处搜索了好几天,所以如果答案发布在我无法找到的地方,我提前道歉。我没有找到完全按照我需要的方式解决这个问题。

我正在尝试编写代码以允许用户选择开始日期和结束日期。我有一个 csv 文件,其中包含以下格式的日期字段:1/1/2013 0:00,我希望允许用户从 2013 年 1 月 1 日到 2013 年 6 月 30 日的任何范围内选择日期。

我已导入以下内容,然后当我收到AttributeError: 'method_descriptor' object has no attribute 'strptime' 时,我的问题立即开始,但我读到它是一个属性。我也试图避免使用任何 GUI;只需要一种简单的方法来允许用户输入参数。我的最终目标是将其转换为 ArcGIS 中用于用户输入参数的工具,我可以这样做,但我需要先正确创建脚本。

import arcpy, os, sys                      
from datetime import datetime, date, timedelta

startDate = datetime.date.strptime(userdateString, '%Y-%m-%d')

非常感谢您提供的任何指导!我对这一切感到很困惑......

【问题讨论】:

    标签: date datetime python-2.7 datepicker


    【解决方案1】:

    这样就消除了属性错误:

    >>> from datetime import datetime
    >>> userdateString = '2013-2-1'
    >>> datetime.strptime(userdateString, '%Y-%m-%d')
    datetime.datetime(2013, 2, 1, 0, 0)
    

    请注意,要使用的代码完全取决于导入的内容。如果我使用import date 代替from datetime import datetime,请注意,由于python 的命名约定,使用的方法是datetime.datetime.strptime,而不是上面的datetime.strptime

    >>> import datetime
    >>> userdateString = '2013-2-1'
    >>> datetime.datetime.strptime(userdateString, '%Y-%m-%d')
    datetime.datetime(2013, 2, 1, 0, 0)
    

    附录:是的,您可以更改日期格式:

    >>> from datetime import datetime
    >>> s = '2-1-2013'
    >>> datetime.strptime(s, '%m-%d-%Y')
    datetime.datetime(2013, 2, 1, 0, 0)
    >>> s = '2/1/2013'
    >>> datetime.strptime(s, '%m/%d/%Y')
    datetime.datetime(2013, 2, 1, 0, 0)
    

    【讨论】:

    • 嗨@John1024,感谢您的意见。我试过使用你的例子,但我得到:AttributeError:类型对象'datetime.datetime'没有属性'datetime'。我已经导入了日期时间,但我不知道为什么这不起作用。
    • 您好,John,您的代码运行了,但我不得不取出第三行 datetime.datetime(2013, 2, 1, 0, 0) 否则我会得到 'datetime.datetime' has no属性“日期时间”。我不知道为什么会这样,因为我一开始确实导入了日期时间。怕以后拿出来会有不好的影响,不然就不能跑了。非常感谢!我真的很感激!
    • 嗨@user3081899,那行datetime.datetime(2013, 2, 1, 0, 0) 不是代码:这是运行上一行的结果。当以交互方式运行 python 解释器时,“>>>”是提示符。因此,以“>>>”开头的行被输入到解释器中。最后一行,没有提示的,是python的响应。在开发时,我建议以交互方式进行尝试,因为它使调试变得更加容易。
    • 啊……好吧。我在 PythonWin 中运行脚本,这就是为什么我没有看到“>>>”作为提示,而是在交互式窗口中。换句话说,我看到它与你的方式相反:作为 Python 响应的一行或多行显示在交互式窗口中,它的前面是“>>”。另外,我导入了日期时间和日期。我想我只需要一个或另一个?再次感谢!
    • 好的。这个即时问题会令人困惑。我认为您会发现大部分 python 世界都依赖于“>>>”作为提示约定,它明确地是标准库中 doctest 模块的一部分。而且,是的,要运行 strptime,您只需要导入日期时间。 (我不知道你的代码是否在其他地方使用date。)我开发了一个脚本后,我经常在上面运行pylintpylint 是一个不完美的程序,但它会报告未使用的导入。
    【解决方案2】:
    >>> import datetime
    >>> userdateString= '2013-2-1'
    >>> startDate = datetime.datetime.strptime(userdateString, '%Y-%m-%d')
    >>> print startDate
    2013-02-01 00:00:00
    

    您需要在 datetime 和 strptime 之间添加一个额外的 datetime。

    【讨论】:

    • 您好,感谢您的帮助!当我只使用一个日期时间而不是两个日期时间时,脚本就会运行,尽管我认为它对你有用。当我同时使用两者时,我得到一个属性错误“datetime.datetime”没有属性“datetime”。当我只使用一个时,我会得到和你一样的结果。我正在使用 2.7.2 所以我想知道这是否与它有关。非常感谢,不过!真的很感激!
    • 这很有趣。我使用的是 2.7.3,所以版本之间可能有所不同。当我尝试使用一个日期时间时,它会崩溃并显示以下消息:'“Traceback(最近一次调用最后一次):文件“”,第 1 行,在 startDate = datetime.strptime(userdateString,“%Y -%m=%d") AttributeError: 'module' 对象没有属性 'strptime''
    • 您好,请参阅下面约翰的解释,了解为什么会这样。我认为这是问题所在。我忘了问,格式必须是'2013-2-1'吗?我正在阅读它所做的任何地方,但我用作输入文件的 csv 文件具有这种格式 2013 年 1 月 1 日。因此,当我将脚本转换为 ArcGIS 中的脚本工具时,它无法识别格式。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多