【问题标题】:Python expression to find all dates in a database field that are between two datesPython表达式查找数据库字段中两个日期之间的所有日期
【发布时间】:2016-11-09 15:32:06
【问题描述】:

我已经构建了一个 python 脚本,它首先打印上周的所有日期,然后创建两个变量,它们是第一个和最后一个日期,这样我就可以编写一个表达式来查找字段中介于两者之间的所有日期那些日期。这是我目前所拥有的:

import arcpy, sys, string, os, time, shutil, tempfile, logging, datetime
# this is the current date
now = datetime.datetime.now()

# subtract 7 days from the current date
SevenDaysBack = now - datetime.timedelta(days=7)

# this is the date of the first day of last week
now_day_1 = SevenDaysBack - datetime.timedelta(days=now.weekday())

dates = {}
#this lists out all the dates of last week
for n_week in range(1):
    dates[n_week] = [(now_day_1 + datetime.timedelta(days=d+n_week*7)).strftime("%Y%m%d") for d in range(7)]
##for d in range(7):
    ##dates = [(now_day_1 + datetime.timedelta(days=d*7)).strftime("%Y%m%d")]
print dates

From_Date = dates[n_week][0]
To_Date = dates[n_week][6]
print From_Date
print To_Date

SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date
print SaleDateExpression

脚本一直运行,直到我尝试创建将在以后的函数中使用的表达式。我确定这是一个语法问题,但我不知道如何使它工作。

【问题讨论】:

  • "我确定是语法问题...",当您尝试运行它时是否输出任何错误?如果是这样,请完整发布它引发的错误。
  • 除非我注释掉表达式,否则我无法通过语法错误来运行它。脚本的其余部分有效。语法错误突出显示“之间”这个词。

标签: python datetime expression


【解决方案1】:

您的代码倒数第二行有一个奇怪的地方:
SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date

出现您所说的语法错误是因为[DATE_SOLD] 在这里是无效的Python;此外,它似乎没有任何意义,因为您没有向我们提供任何关于 DATE_SOLD 是什么的信息。

因此,最后一行可能是
SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date
这将输出

在20161031和20161106之间


但是,假设您希望输出更具可读性,有几件事需要评论。

首先,您将日期创建为%Y%m%d,它将年、月和日连接在一起,没有空格,创建您看到的2016103120161106;要解决此问题,您可以将%Y %m %d 输入strftime

其次,单词和日期之间没有空格。为了解决这个问题,您可以在between 之后和and 之前和之后添加一个空格,如下"between " + From_Date + " and " + To_Date

最后,按照所有这些说明,您的代码现在将输出

2016 年 10 月 31 日至 2016 年 11 月 06 日之间


编辑:

根据您的评论,似乎唯一的问题是 [DATE_SOLD] 不在引号内。为了达到您在评论中提出的[DATE_SOLD] between 20160601 and 20160630 中提出的结果,您需要在strftime 中使用%Y%m%d,并在between 之后和and 之前和之后添加空格,如上所示.这将提供所需的输出。

[DATE_SOLD] 介于 20160601 和 20160630 之间

【讨论】:

  • 感谢 Wintro 的帮助。该表达式最初来自我构建的模型,它与我的脚本执行相同的操作。当我将模型导出到脚本时,SaleDateExpression 代码如下所示: SaleDateExpression = arcpy.GetParameterAsText(0) if SaleDateExpression == '#' or not SaleDateExpression: SaleDateExpression = "[DATE_SOLD] between 20160601 and 20160630" 并且该表达式被调用在未包含的脚本的一部分中进一步向下。这个可行,但我不想在每次运行之前都编辑脚本,所以我用上面的代码替换它
  • @ChristyWest 我编辑了我的问题,问题解决了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2017-01-29
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多