擅长:python、mysql、java
<p>以下是我对@Felk答案的实现:</p>
<pre><code>from functools import reduce
from psycopg2.extras import DateTimeTZRange
def _DateTimeTZRange_intersect(range1, range2):
new_range = DateTimeTZRange(
max(range1.lower, range2.lower),
min(range1.upper, range2.upper)
)
return new_range if new_range.lower < new_range.upper else None
def DateTimeTZRange_intersect(*args):
return reduce(_DateTimeTZRange_intersect, args) if args else []
def _DateTimeTZRange_intersect_2d(ranges1, ranges2):
for range1 in ranges1:
for range2 in ranges2:
intersection = DateTimeTZRange_intersect(range1, range2)
if intersection:
yield intersection
def DateTimeTZRange_intersect_2d(*args):
return reduce(_DateTimeTZRange_intersect_2d, args) if args else []
</code></pre>