@@ -395,7 +395,7 @@ def _expand(
395395 time_range_end = time_range_end .replace (tzinfo = None )
396396
397397 for vevent in vevents_overridden :
398- _strip_single_event (vevent , dt_format )
398+ _strip_single_event (vevent , dt_format , all_day_event )
399399
400400 duration = None
401401 if hasattr (base_vevent , "dtend" ):
@@ -457,7 +457,7 @@ def _expand(
457457 .format (max_occurrence ))
458458
459459 _strip_component (vevent_component )
460- _strip_single_event (base_vevent , dt_format )
460+ _strip_single_event (base_vevent , dt_format , all_day_event )
461461
462462 i_overridden = 0
463463
@@ -480,7 +480,13 @@ def _expand(
480480 continue
481481
482482 # Check for overridden instances
483- i_overridden , vevent = _find_overridden (i_overridden , vevents_overridden , recurrence_utc , dt_format )
483+ i_overridden , vevent = _find_overridden (
484+ i_overridden ,
485+ vevents_overridden ,
486+ recurrence_utc ,
487+ dt_format ,
488+ all_day_event ,
489+ )
484490
485491 if not vevent :
486492 # Create new instance from recurrence
@@ -568,15 +574,20 @@ def _expand(
568574 return element , len (filtered_vevents )
569575
570576
571- def _convert_timezone (vevent : vobject .icalendar .RecurringComponent ,
572- name_prop : str ,
573- name_content_line : str ):
577+ def _convert_timezone (
578+ vevent : vobject .icalendar .RecurringComponent ,
579+ name_prop : str ,
580+ name_content_line : str ,
581+ all_day_event : bool = False
582+ ):
574583 prop = getattr (vevent , name_prop , None )
575584 if prop :
576585 if type (prop .value ) is datetime .date :
577586 date_time = datetime .datetime .fromordinal (
578587 prop .value .toordinal ()
579- ).replace (tzinfo = datetime .timezone .utc )
588+ )
589+ if not all_day_event :
590+ date_time = date_time .replace (tzinfo = datetime .timezone .utc )
580591 else :
581592 date_time = prop .value .astimezone (datetime .timezone .utc )
582593
@@ -591,10 +602,14 @@ def _convert_to_utc(vevent: vobject.icalendar.RecurringComponent,
591602 setattr (vevent , name_prop , ContentLine (name = prop .name , value = prop .value .strftime (dt_format ), params = []))
592603
593604
594- def _strip_single_event (vevent : vobject .icalendar .RecurringComponent , dt_format : str ) -> None :
595- _convert_timezone (vevent , 'dtstart' , 'DTSTART' )
596- _convert_timezone (vevent , 'dtend' , 'DTEND' )
597- _convert_timezone (vevent , 'recurrence_id' , 'RECURRENCE-ID' )
605+ def _strip_single_event (
606+ vevent : vobject .icalendar .RecurringComponent ,
607+ dt_format : str ,
608+ all_day_event : bool = False ,
609+ ) -> None :
610+ _convert_timezone (vevent , 'dtstart' , 'DTSTART' , all_day_event )
611+ _convert_timezone (vevent , 'dtend' , 'DTEND' , all_day_event )
612+ _convert_timezone (vevent , 'recurrence_id' , 'RECURRENCE-ID' , all_day_event )
598613
599614 # There is something strange behaviour during serialization native datetime, so converting manually
600615 _convert_to_utc (vevent , 'dtstart' , dt_format )
@@ -675,13 +690,13 @@ def _find_overridden(
675690 start : int ,
676691 vevents : List [vobject .icalendar .RecurringComponent ],
677692 dt : datetime .datetime ,
678- dt_format : str
693+ dt_format : str ,
694+ all_day_event : bool ,
679695) -> Tuple [int , Optional [vobject .icalendar .RecurringComponent ]]:
680696 for i in range (start , len (vevents )):
681- dt_event = datetime .datetime .strptime (
682- vevents [i ].recurrence_id .value ,
683- dt_format
684- ).replace (tzinfo = datetime .timezone .utc )
697+ dt_event = datetime .datetime .strptime (vevents [i ].recurrence_id .value , dt_format )
698+ if not all_day_event :
699+ dt_event = dt_event .replace (tzinfo = datetime .timezone .utc )
685700 if dt_event == dt :
686701 return (i + 1 , vevents [i ])
687702 return (start , None )
0 commit comments