本文将为您提供关于在Python中查找日期范围重叠的详细介绍,我们还将为您解释在python中查找日期范围重叠怎么办的相关知识,同时,我们还将为您提供关于FlutterFirebase查询过滤器的日期
本文将为您提供关于在Python中查找日期范围重叠的详细介绍,我们还将为您解释在python中查找日期范围重叠怎么办的相关知识,同时,我们还将为您提供关于Flutter Firebase查询过滤器的日期范围与另一个日期范围重叠、php-需要查看日期范围是否与sql中的另一个日期范围重叠、python – 在字符串中查找重叠和非重叠子串的数量、python 创建日期范围的实用信息。
本文目录一览:- 在Python中查找日期范围重叠(在python中查找日期范围重叠怎么办)
- Flutter Firebase查询过滤器的日期范围与另一个日期范围重叠
- php-需要查看日期范围是否与sql中的另一个日期范围重叠
- python – 在字符串中查找重叠和非重叠子串的数量
- python 创建日期范围
在Python中查找日期范围重叠(在python中查找日期范围重叠怎么办)
我试图找到一种基于特定列(id)在数据框中查找重叠数据范围(每行提供的开始/结束日期)的更有效方法。
数据框在“来自”列上排序
我认为有一种方法可以像我一样避免“双重”应用功能…
import pandas as pdfrom datetime import datetimedf = pd.DataFrame(columns=[''id'',''from'',''to''], index=range(5), \ data=[[878,''2006-01-01'',''2007-10-01''], [878,''2007-10-02'',''2008-12-01''], [878,''2008-12-02'',''2010-04-03''], [879,''2010-04-04'',''2199-05-11''], [879,''2016-05-12'',''2199-12-31'']])df[''from''] = pd.to_datetime(df[''from''])df[''to''] = pd.to_datetime(df[''to'']) id from to0 878 2006-01-01 2007-10-011 878 2007-10-02 2008-12-012 878 2008-12-02 2010-04-033 879 2010-04-04 2199-05-114 879 2016-05-12 2199-12-31
我使用“应用”功能在所有组上循环,并且在每个组中,每行使用“应用”:
def check_date_by_id(df): df[''prevFrom''] = df[''from''].shift() df[''prevTo''] = df[''to''].shift() def check_date_by_row(x): if pd.isnull(x.prevFrom) or pd.isnull(x.prevTo): x[''overlap''] = False return x latest_start = max(x[''from''], x.prevFrom) earliest_end = min(x[''to''], x.prevTo) x[''overlap''] = int((earliest_end - latest_start).days) + 1 > 0 return x return df.apply(check_date_by_row, axis=1).drop([''prevFrom'',''prevTo''], axis=1)df.groupby(''id'').apply(check_date_by_id) id from to overlap0 878 2006-01-01 2007-10-01 False1 878 2007-10-02 2008-12-01 False2 878 2008-12-02 2010-04-03 False3 879 2010-04-04 2199-05-11 False4 879 2016-05-12 2199-12-31 True
答案1
小编典典您可以移动to
列并直接减去日期时间。
df[''overlap''] = (df[''to''].shift()-df[''from'']) > timedelta(0)
分组时应用它id
可能看起来像
df[''overlap''] = (df.groupby(''id'') .apply(lambda x: (x[''to''].shift() - x[''from'']) > timedelta(0)) .reset_index(level=0, drop=True))
演示版
>>> df id from to0 878 2006-01-01 2007-10-011 878 2007-10-02 2008-12-012 878 2008-12-02 2010-04-033 879 2010-04-04 2199-05-114 879 2016-05-12 2199-12-31>>> df[''overlap''] = (df.groupby(''id'') .apply(lambda x: (x[''to''].shift() - x[''from'']) > timedelta(0)) .reset_index(level=0, drop=True))>>> df id from to overlap0 878 2006-01-01 2007-10-01 False1 878 2007-10-02 2008-12-01 False2 878 2008-12-02 2010-04-03 False3 879 2010-04-04 2199-05-11 False4 879 2016-05-12 2199-12-31 True
Flutter Firebase查询过滤器的日期范围与另一个日期范围重叠
如何解决Flutter Firebase查询过滤器的日期范围与另一个日期范围重叠?
我正在尝试建立一个预订机制,该机制不允许用户有两个重叠的预订。用户必须输入预订的日期范围,该日期范围将存储在Firebase(Cloud Firestore)中。在完成预订之前,我要检查它是否与此用户的另一个预订重叠。
我为每个预订请求存储了这两个变量,我想将其用于此查询:
selectedStartDate(时间戳) selectedEndDate(时间戳)
我尝试的方法无效:
bool overlappingBookingDateCheck(currentUserId,selectedDate) {
bool unavailable = false;
StreamBuilder(
stream: FirebaseFirestore.instance
.collection(''users'')
.doc(currentUserId)
.collection(''bookings'')
.where("status",isEqualTo: "active")
.where("selectedStartDate",isGreaterThanorEqualTo: selectedDate.start)
.where("selectedEndDate",isLessthanorEqualTo: selectedDate.end)
.snapshots(),builder: (ctx,streamSnapshot) {
if (streamSnapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),);
}
// If there was a match in firebase,then there is an
// overlapping booking,so return unavaiable is true
if (streamSnapshot.hasData) {
unavailable = true;
}
});
return unavailable;
}
此代码有几个问题。一种是多重where语句是AND而不是OR。这使我无法检查开始日期或结束日期是否与另一个预订重叠。在两种情况下,都应拒绝预订。第二个是我收到一个错误,该错误无法用不等号运算符(或> =)过滤多个字段。
如果有人能帮助我如何获得所需的查询(检查所请求的预订日期范围是否与现有预订重叠),将感到非常高兴。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
php-需要查看日期范围是否与sql中的另一个日期范围重叠
我有一个表,用于存储房间的预订,架构为:
ID | ROOM_ID | CHECK_IN_DATE | CHECK_OUT_DATE | USER_ID
我需要对房间在设定的日期范围内可用/不可用的房间进行搜索查询.
还请记住,存在另一个表,该表保存了预定客房时的日期,其格式为:
ROOM_ID | DATE
因此,我需要运行一个查询,以查找设置范围内的可用房间,我将如何制定查询条件?
我在这里使用MysqL.
– -编辑 – –
还有一个模式的Rooms表:
ID | ROOM DETAILS etc
“不可用/预定日期”表基本上只包含零星的单个日期,“不可用”表中的每个日期是指由于某种原因无法预订房间的日期,例如:维护等
解决方法:
SELECT
ROOM_ID
FROM
Rooms r
LEFT JOIN Bookings b ON (
r.ROOM_ID = b.ROOM_ID
AND b.CHECK_IN_DATE > '$MAX_DATE'
AND b.CHECK_OUT_DATE < '$MIN_DATE'
)
我不确定预定房间的因素,因为没有日期范围.预订房间是否还会获得预订条目?
python – 在字符串中查找重叠和非重叠子串的数量
[虽然如果可以应用于以下问题我请求上述方法的解决方案]
问:虽然我做对了,但它仍然不是一个可扩展的解决方案,绝对没有优化(分数低).阅读以下问题描述,并提供更好的解决方案.
题:
为简单起见,我们要求前缀和后缀非空并且比整个字符串S短.字符串S的边界是任何前缀和后缀的字符串.例如,“cut”是字符串“cutletcut”的边框,字符串“barbararhubarb”有两个边框:“b”和“barb”.
class Solution { public int solution(String S); }
在给定由N个字符组成的字符串S的情况下,返回其最长边界的长度,该边界在给定字符串中至少有三次非重叠出现.如果S中没有这样的边界,则该函数应返回0.
例如,
>如果S =“barbararhubarb”,则函数应返回1,如上所述;
>如果S =“ababab”,则函数应返回2,因为“ab”和“abab”都是S的边界,但只有“ab”有三个非重叠的出现;
>如果S =“baaab”,则该函数应返回0,因为其唯一的边界“b”仅出现两次.
假使,假设:
> N是[0..1,000,000]范围内的整数;
>字符串S仅由小写字母(a-z)组成.
复杂:
>预期的最坏情况时间复杂度为O(N);
>预期的最坏情况空间复杂度是O(N)(不计算输入参数所需的存储空间).
def solution(S): S = S.lower() presuf = [] f = l = str() rank = [] wordlen = len(S) for i,j in enumerate(S): y = -i-1 f += S[i] l = S[y] + l if f==l and f != S: #print f,l new=S[i+1:-i-1] mindex = new.find(f) if mindex != -1: mid = f #new[mindex] #print mid else: mid = None presuf.append((f,mid,l,(i,y))) #print presuf for i,j,k,o in presuf: if o[0]<wordlen+o[-1]: #non overlapping if i==j: rank.append(len(i)) else: rank.append(0) if len(rank)==0: return 0 else: return max(rank)
我的解决方案时间复杂度为:O(N2)或O(N4)
非常感谢.
解决方法
http://codility.com/cert/view/certB6J4FV-W89WX4ZABTDRVAG6/details
python 创建日期范围
def mkurl(self):
def create_assist_date(datestart=None, dateend=None):
if datestart is None:
datestart = ''2016-01-01''
if dateend is None:
dateend = datetime.datetime.now().strftime(''%Y-%m-%d'')
# 转为日期格式
datestart = datetime.datetime.strptime(datestart, ''%Y-%m-%d'')
dateend = datetime.datetime.strptime(dateend, ''%Y-%m-%d'')
date_list = []
date_list.append(datestart.strftime(''%Y-%m-%d''))
while datestart < dateend:
# 日期叠加一天
datestart += datetime.timedelta(days=+1)
# 日期转字符串存入列表
date_list.append(datestart.strftime(''%Y-%m-%d''))
return [i.replace(''-'', '''') for i in date_list]
for i in create_assist_date("2018-12-31", "2020-01-01"):
yield self.listurl.format(i)
我们今天的关于在Python中查找日期范围重叠和在python中查找日期范围重叠怎么办的分享就到这里,谢谢您的阅读,如果想了解更多关于Flutter Firebase查询过滤器的日期范围与另一个日期范围重叠、php-需要查看日期范围是否与sql中的另一个日期范围重叠、python – 在字符串中查找重叠和非重叠子串的数量、python 创建日期范围的相关信息,可以在本站进行搜索。
本文标签: