fix: 포트 충돌 회피 — note_bridge 8098, intent_service 8099

Jellyfin(8096), OrbStack(8097) 포트 충돌으로 변경.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-19 13:53:55 +09:00
parent dc08d29509
commit c2257d3a86
2709 changed files with 619549 additions and 10 deletions

View File

@@ -0,0 +1,128 @@
from icalendar.alarms import (
Alarms,
AlarmTime,
)
from icalendar.cal import (
Alarm,
Calendar,
Component,
ComponentFactory,
Event,
FreeBusy,
Journal,
Timezone,
TimezoneDaylight,
TimezoneStandard,
Todo,
)
from icalendar.enums import CUTYPE, FBTYPE, PARTSTAT, RANGE, RELATED, RELTYPE, ROLE
from icalendar.error import (
ComponentEndMissing,
ComponentStartMissing,
FeatureWillBeRemovedInFutureVersion,
IncompleteAlarmInformation,
IncompleteComponent,
InvalidCalendar,
LocalTimezoneMissing,
)
# Parameters and helper methods for splitting and joining string with escaped
# chars.
from icalendar.parser import (
Parameters,
q_join,
q_split,
)
# Property Data Value Types
from icalendar.prop import (
TypesFactory,
vBinary,
vBoolean,
vCalAddress,
vDate,
vDatetime,
vDDDLists,
vDDDTypes,
vDuration,
vFloat,
vFrequency,
vGeo,
vInt,
vMonth,
vPeriod,
vRecur,
vSkip,
vText,
vTime,
vUri,
vUTCOffset,
vWeekday,
)
# Switching the timezone provider
from icalendar.timezone import use_pytz, use_zoneinfo
from .version import __version__, __version_tuple__, version, version_tuple
__all__ = [
"Calendar",
"Event",
"Todo",
"Journal",
"Timezone",
"TimezoneStandard",
"TimezoneDaylight",
"FreeBusy",
"Alarm",
"ComponentFactory",
"vBinary",
"vBoolean",
"vCalAddress",
"vDatetime",
"vDate",
"vDDDLists",
"vDDDTypes",
"vDuration",
"vFloat",
"vInt",
"vPeriod",
"vWeekday",
"vFrequency",
"vRecur",
"vText",
"vTime",
"vUri",
"vGeo",
"vUTCOffset",
"Parameters",
"q_split",
"q_join",
"use_pytz",
"use_zoneinfo",
"__version__",
"version",
"__version_tuple__",
"version_tuple",
"TypesFactory",
"Component",
"vMonth",
"IncompleteComponent",
"InvalidCalendar",
"Alarms",
"AlarmTime",
"ComponentEndMissing",
"ComponentStartMissing",
"IncompleteAlarmInformation",
"LocalTimezoneMissing",
"CUTYPE",
"FBTYPE",
"PARTSTAT",
"RANGE",
"vSkip",
"RELATED",
"vSkip",
"RELTYPE",
"ROLE",
"FeatureWillBeRemovedInFutureVersion"
]

View File

@@ -0,0 +1,34 @@
# file generated by setuptools-scm
# don't change, don't track in version control
__all__ = [
"__version__",
"__version_tuple__",
"version",
"version_tuple",
"__commit_id__",
"commit_id",
]
TYPE_CHECKING = False
if TYPE_CHECKING:
from typing import Tuple
from typing import Union
VERSION_TUPLE = Tuple[Union[int, str], ...]
COMMIT_ID = Union[str, None]
else:
VERSION_TUPLE = object
COMMIT_ID = object
version: str
__version__: str
__version_tuple__: VERSION_TUPLE
version_tuple: VERSION_TUPLE
commit_id: COMMIT_ID
__commit_id__: COMMIT_ID
__version__ = version = '6.3.2'
__version_tuple__ = version_tuple = (6, 3, 2)
__commit_id__ = commit_id = None

View File

@@ -0,0 +1,378 @@
"""Compute the times and states of alarms.
This takes different calendar software into account and the RFC 9074 (Alarm Extension).
- RFC 9074 defines an ACKNOWLEDGED property in the VALARM.
- Outlook does not export VALARM information.
- Google Calendar uses the DTSTAMP to acknowledge the alarms.
- Thunderbird snoozes the alarms with a X-MOZ-SNOOZE-TIME attribute in the event.
- Thunderbird acknowledges the alarms with a X-MOZ-LASTACK attribute in the event.
- Etar deletes alarms that are acknowledged.
- Nextcloud's Webinterface does not do anything with the alarms when the time passes.
"""
from __future__ import annotations
from datetime import date, timedelta, tzinfo
from typing import TYPE_CHECKING, Generator, Optional, Union
from icalendar.cal import Alarm, Event, Todo
from icalendar.error import (
ComponentEndMissing,
ComponentStartMissing,
IncompleteAlarmInformation,
LocalTimezoneMissing,
)
from icalendar.timezone import tzp
from icalendar.tools import is_date, normalize_pytz, to_datetime
if TYPE_CHECKING:
from datetime import datetime
Parent = Union[Event, Todo]
class AlarmTime:
"""An alarm time with all the information."""
def __init__(
self,
alarm: Alarm,
trigger: datetime,
acknowledged_until: Optional[datetime] = None,
snoozed_until: Optional[datetime] = None,
parent: Optional[Parent] = None,
):
"""Create a new AlarmTime.
alarm
the Alarm component
trigger
a date or datetime at which to trigger the alarm
acknowledged_until
an optional datetime in UTC until when all alarms
have been acknowledged
snoozed_until
an optional datetime in UTC until which all alarms of
the same parent are snoozed
parent
the optional parent component the alarm refers to
local_tzinfo
the local timezone that events without tzinfo should have
"""
self._alarm = alarm
self._parent = parent
self._trigger = trigger
self._last_ack = acknowledged_until
self._snooze_until = snoozed_until
@property
def acknowledged(self) -> Optional[datetime]:
"""The time in UTC at which this alarm was last acknowledged.
If the alarm was not acknowledged (dismissed), then this is None.
"""
ack = self.alarm.ACKNOWLEDGED
if ack is None:
return self._last_ack
if self._last_ack is None:
return ack
return max(ack, self._last_ack)
@property
def alarm(self) -> Alarm:
"""The alarm component."""
return self._alarm
@property
def parent(self) -> Optional[Parent]:
"""This is the component that contains the alarm.
This is None if you did not use Alarms.set_component().
"""
return self._parent
def is_active(self) -> bool:
"""Whether this alarm is active (True) or acknowledged (False).
For example, in some calendar software, this is True until the user looks
at the alarm message and clicked the dismiss button.
Alarms can be in local time (without a timezone).
To calculate if the alarm really happened, we need it to be in a timezone.
If a timezone is required but not given, we throw an IncompleteAlarmInformation.
"""
acknowledged = self.acknowledged
if not acknowledged:
# if nothing is acknowledged, this alarm counts
return True
if self._snooze_until is not None and self._snooze_until > acknowledged:
return True
trigger = self.trigger
if trigger.tzinfo is None:
raise LocalTimezoneMissing(
"A local timezone is required to check if the alarm is still active. "
"Use Alarms.set_local_timezone()."
)
return trigger > acknowledged
@property
def trigger(self) -> date:
"""This is the time to trigger the alarm.
If the alarm has been snoozed, this can differ from the TRIGGER property.
"""
if self._snooze_until is not None and self._snooze_until > self._trigger:
return self._snooze_until
return self._trigger
class Alarms:
"""Compute the times and states of alarms.
This is an example using RFC 9074.
One alarm is 30 minutes before the event and acknowledged.
Another alarm is 15 minutes before the event and still active.
>>> from icalendar import Event, Alarms
>>> event = Event.from_ical(
... '''BEGIN:VEVENT
... CREATED:20210301T151004Z
... UID:AC67C078-CED3-4BF5-9726-832C3749F627
... DTSTAMP:20210301T151004Z
... DTSTART;TZID=America/New_York:20210302T103000
... DTEND;TZID=America/New_York:20210302T113000
... SUMMARY:Meeting
... BEGIN:VALARM
... UID:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
... TRIGGER:-PT30M
... ACKNOWLEDGED:20210302T150004Z
... DESCRIPTION:Event reminder
... ACTION:DISPLAY
... END:VALARM
... BEGIN:VALARM
... UID:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
... TRIGGER:-PT15M
... DESCRIPTION:Event reminder
... ACTION:DISPLAY
... END:VALARM
... END:VEVENT
... ''')
>>> alarms = Alarms(event)
>>> len(alarms.times) # all alarms including those acknowledged
2
>>> len(alarms.active) # the alarms that are not acknowledged, yet
1
>>> alarms.active[0].trigger # this alarm triggers 15 minutes before 10:30
datetime.datetime(2021, 3, 2, 10, 15, tzinfo=ZoneInfo(key='America/New_York'))
RFC 9074 specifies that alarms can also be triggered by proximity.
This is not implemented yet.
"""
def __init__(self, component: Optional[Alarm | Event | Todo] = None):
"""Start computing alarm times."""
self._absolute_alarms: list[Alarm] = []
self._start_alarms: list[Alarm] = []
self._end_alarms: list[Alarm] = []
self._start: Optional[date] = None
self._end: Optional[date] = None
self._parent: Optional[Parent] = None
self._last_ack: Optional[datetime] = None
self._snooze_until: Optional[datetime] = None
self._local_tzinfo: Optional[tzinfo] = None
if component is not None:
self.add_component(component)
def add_component(self, component: Alarm | Parent):
"""Add a component.
If this is an alarm, it is added.
Events and Todos are added as a parent and all
their alarms are added, too.
"""
if isinstance(component, (Event, Todo)):
self.set_parent(component)
self.set_start(component.start)
self.set_end(component.end)
if component.is_thunderbird():
self.acknowledge_until(component.X_MOZ_LASTACK)
self.snooze_until(component.X_MOZ_SNOOZE_TIME)
else:
self.acknowledge_until(component.DTSTAMP)
for alarm in component.walk("VALARM"):
self.add_alarm(alarm)
def set_parent(self, parent: Parent):
"""Set the parent of all the alarms.
If you would like to collect alarms from a component, use add_component
"""
if self._parent is not None and self._parent is not parent:
raise ValueError("You can only set one parent for this alarm calculation.")
self._parent = parent
def add_alarm(self, alarm: Alarm) -> None:
"""Optional: Add an alarm component."""
trigger = alarm.TRIGGER
if trigger is None:
return
if isinstance(trigger, date):
self._absolute_alarms.append(alarm)
elif alarm.TRIGGER_RELATED == "START":
self._start_alarms.append(alarm)
else:
self._end_alarms.append(alarm)
def set_start(self, dt: Optional[date]):
"""Set the start of the component.
If you have only absolute alarms, this is not required.
If you have alarms relative to the start of a compoment, set the start here.
"""
self._start = dt
def set_end(self, dt: Optional[date]):
"""Set the end of the component.
If you have only absolute alarms, this is not required.
If you have alarms relative to the end of a compoment, set the end here.
"""
self._end = dt
def _add(self, dt: date, td: timedelta):
"""Add a timedelta to a datetime."""
if is_date(dt):
if td.seconds == 0:
return dt + td
dt = to_datetime(dt)
return normalize_pytz(dt + td)
def acknowledge_until(self, dt: Optional[date]) -> None:
"""This is the time in UTC when all the alarms of this component were acknowledged.
Only the last call counts.
Since RFC 9074 (Alarm Extension) was created later,
calendar implementations differ in how they acknowledge alarms.
For example, Thunderbird and Google Calendar store the last time
an event has been acknowledged because of an alarm.
All alarms that happen before this time count as acknowledged.
"""
self._last_ack = tzp.localize_utc(dt) if dt is not None else None
def snooze_until(self, dt: Optional[date]) -> None:
"""This is the time in UTC when all the alarms of this component were snoozed.
Only the last call counts.
The alarms are supposed to turn up again at dt when they are not acknowledged
but snoozed.
"""
self._snooze_until = tzp.localize_utc(dt) if dt is not None else None
def set_local_timezone(self, tzinfo: Optional[tzinfo | str]):
"""Set the local timezone.
Events are sometimes in local time.
In order to compute the exact time of the alarm, some
alarms without timezone are considered local.
Some computations work without setting this, others don't.
If they need this information, expect a LocalTimezoneMissing exception
somewhere down the line.
"""
self._local_tzinfo = tzp.timezone(tzinfo) if isinstance(tzinfo, str) else tzinfo
@property
def times(self) -> list[AlarmTime]:
"""Compute and return the times of the alarms given.
If the information for calculation is incomplete, this will raise a
IncompleteAlarmInformation exception.
Please make sure to set all the required parameters before calculating.
If you forget to set the acknowledged times, that is not problem.
"""
return (
self._get_end_alarm_times()
+ self._get_start_alarm_times()
+ self._get_absolute_alarm_times()
)
def _repeat(self, first: datetime, alarm: Alarm) -> Generator[datetime]:
"""The times when the alarm is triggered relative to start."""
yield first # we trigger at the start
repeat = alarm.REPEAT
duration = alarm.DURATION
if repeat and duration:
for i in range(1, repeat + 1):
yield self._add(first, duration * i)
def _alarm_time(self, alarm: Alarm, trigger: date):
"""Create an alarm time with the additional attributes."""
if getattr(trigger, "tzinfo", None) is None and self._local_tzinfo is not None:
trigger = normalize_pytz(trigger.replace(tzinfo=self._local_tzinfo))
return AlarmTime(
alarm, trigger, self._last_ack, self._snooze_until, self._parent
)
def _get_absolute_alarm_times(self) -> list[AlarmTime]:
"""Return a list of absolute alarm times."""
return [
self._alarm_time(alarm, trigger)
for alarm in self._absolute_alarms
for trigger in self._repeat(alarm.TRIGGER, alarm)
]
def _get_start_alarm_times(self) -> list[AlarmTime]:
"""Return a list of alarm times relative to the start of the component."""
if self._start is None and self._start_alarms:
raise ComponentStartMissing(
"Use Alarms.set_start because at least one alarm is relative to the start of a component."
)
return [
self._alarm_time(alarm, trigger)
for alarm in self._start_alarms
for trigger in self._repeat(self._add(self._start, alarm.TRIGGER), alarm)
]
def _get_end_alarm_times(self) -> list[AlarmTime]:
"""Return a list of alarm times relative to the start of the component."""
if self._end is None and self._end_alarms:
raise ComponentEndMissing(
"Use Alarms.set_end because at least one alarm is relative to the end of a component."
)
return [
self._alarm_time(alarm, trigger)
for alarm in self._end_alarms
for trigger in self._repeat(self._add(self._end, alarm.TRIGGER), alarm)
]
@property
def active(self) -> list[AlarmTime]:
"""The alarm times that are still active and not acknowledged.
This considers snoozed alarms.
Alarms can be in local time (without a timezone).
To calculate if the alarm really happened, we need it to be in a timezone.
If a timezone is required but not given, we throw an IncompleteAlarmInformation.
"""
return [alarm_time for alarm_time in self.times if alarm_time.is_active()]
__all__ = [
"Alarms",
"AlarmTime",
"IncompleteAlarmInformation",
"ComponentEndMissing",
"ComponentStartMissing",
]

View File

@@ -0,0 +1,700 @@
"""Attributes of Components and properties."""
from __future__ import annotations
import itertools
from datetime import date, datetime, timedelta
from typing import TYPE_CHECKING, Optional, Union
from icalendar.error import InvalidCalendar
from icalendar.prop import vCategory, vDDDTypes, vRecur, vText
from icalendar.timezone import tzp
if TYPE_CHECKING:
from icalendar.cal import Component
def _get_rdates(self: Component) -> list[
Union[tuple[date, None],
tuple[datetime, None],
tuple[datetime, datetime]]]:
"""The RDATE property defines the list of DATE-TIME values for recurring components.
RDATE is defined in :rfc:`5545`.
The return value is a list of tuples ``(start, end)``.
``start`` can be a :class:`datetime.date` or a :class:`datetime.datetime`,
with and without timezone.
``end`` is :obj:`None` if the end is not specified and a :class:`datetime.datetime`
if the end is specified.
Value Type:
The default value type for this property is DATE-TIME.
The value type can be set to DATE or PERIOD.
Property Parameters:
IANA, non-standard, value data type, and time
zone identifier property parameters can be specified on this
property.
Conformance:
This property can be specified in recurring "VEVENT",
"VTODO", and "VJOURNAL" calendar components as well as in the
"STANDARD" and "DAYLIGHT" sub-components of the "VTIMEZONE"
calendar component.
Description:
This property can appear along with the "RRULE"
property to define an aggregate set of repeating occurrences.
When they both appear in a recurring component, the recurrence
instances are defined by the union of occurrences defined by both
the "RDATE" and "RRULE".
The recurrence dates, if specified, are used in computing the
recurrence set. The recurrence set is the complete set of
recurrence instances for a calendar component. The recurrence set
is generated by considering the initial "DTSTART" property along
with the "RRULE", "RDATE", and "EXDATE" properties contained
within the recurring component. The "DTSTART" property defines
the first instance in the recurrence set. The "DTSTART" property
value SHOULD match the pattern of the recurrence rule, if
specified. The recurrence set generated with a "DTSTART" property
value that doesn't match the pattern of the rule is undefined.
The final recurrence set is generated by gathering all of the
start DATE-TIME values generated by any of the specified "RRULE"
and "RDATE" properties, and then excluding any start DATE-TIME
values specified by "EXDATE" properties. This implies that start
DATE-TIME values specified by "EXDATE" properties take precedence
over those specified by inclusion properties (i.e., "RDATE" and
"RRULE"). Where duplicate instances are generated by the "RRULE"
and "RDATE" properties, only one recurrence is considered.
Duplicate instances are ignored.
Example:
Below, we set one RDATE in a list and get the resulting tuple of start and end.
.. code-block:: pycon
>>> from icalendar import Event
>>> from datetime import datetime
>>> event = Event()
# Add a list of recurrence dates
>>> event.add("RDATE", [datetime(2025, 4, 28, 16, 5)])
>>> event.rdates
[(datetime.datetime(2025, 4, 28, 16, 5), None)]
.. note::
You cannot modify the RDATE value by modifying the result.
Use :func:`icalendar.cal.Component.add` to add values.
If you want to compute recurrences, have a look at :ref:`Related projects`.
"""
result = []
rdates = self.get("RDATE", [])
for rdates in (rdates,) if not isinstance(rdates, list) else rdates:
for dts in rdates.dts:
rdate = dts.dt
if isinstance(rdate, tuple):
# we have a period as rdate
if isinstance(rdate[1], timedelta):
result.append((rdate[0], rdate[0] + rdate[1]))
else:
result.append(rdate)
else:
# we have a date/datetime
result.append((rdate, None))
return result
rdates_property = property(_get_rdates)
def _get_exdates(self: Component) -> list[date|datetime]:
"""EXDATE defines the list of DATE-TIME exceptions for recurring components.
EXDATE is defined in :rfc:`5545`.
Value Type:
The default value type for this property is DATE-TIME.
The value type can be set to DATE.
Property Parameters:
IANA, non-standard, value data type, and time
zone identifier property parameters can be specified on this
property.
Conformance:
This property can be specified in recurring "VEVENT",
"VTODO", and "VJOURNAL" calendar components as well as in the
"STANDARD" and "DAYLIGHT" sub-components of the "VTIMEZONE"
calendar component.
Description:
The exception dates, if specified, are used in
computing the recurrence set. The recurrence set is the complete
set of recurrence instances for a calendar component. The
recurrence set is generated by considering the initial "DTSTART"
property along with the "RRULE", "RDATE", and "EXDATE" properties
contained within the recurring component. The "DTSTART" property
defines the first instance in the recurrence set. The "DTSTART"
property value SHOULD match the pattern of the recurrence rule, if
specified. The recurrence set generated with a "DTSTART" property
value that doesn't match the pattern of the rule is undefined.
The final recurrence set is generated by gathering all of the
start DATE-TIME values generated by any of the specified "RRULE"
and "RDATE" properties, and then excluding any start DATE-TIME
values specified by "EXDATE" properties. This implies that start
DATE-TIME values specified by "EXDATE" properties take precedence
over those specified by inclusion properties (i.e., "RDATE" and
"RRULE"). When duplicate instances are generated by the "RRULE"
and "RDATE" properties, only one recurrence is considered.
Duplicate instances are ignored.
The "EXDATE" property can be used to exclude the value specified
in "DTSTART". However, in such cases, the original "DTSTART" date
MUST still be maintained by the calendaring and scheduling system
because the original "DTSTART" value has inherent usage
dependencies by other properties such as the "RECURRENCE-ID".
Example:
Below, we add an exdate in a list and get the resulting list of exdates.
.. code-block:: pycon
>>> from icalendar import Event
>>> from datetime import datetime
>>> event = Event()
# Add a list of excluded dates
>>> event.add("EXDATE", [datetime(2025, 4, 28, 16, 5)])
>>> event.exdates
[datetime.datetime(2025, 4, 28, 16, 5)]
.. note::
You cannot modify the EXDATE value by modifying the result.
Use :func:`icalendar.cal.Component.add` to add values.
If you want to compute recurrences, have a look at :ref:`Related projects`.
"""
result = []
exdates = self.get("EXDATE", [])
for exdates in (exdates,) if not isinstance(exdates, list) else exdates:
for dts in exdates.dts:
exdate = dts.dt
# we have a date/datetime
result.append(exdate)
return result
exdates_property = property(_get_exdates)
def _get_rrules(self: Component) -> list[vRecur]:
"""RRULE defines a rule or repeating pattern for recurring components.
RRULE is defined in :rfc:`5545`.
:rfc:`7529` adds the ``SKIP`` parameter :class:`icalendar.prop.vSkip`.
Property Parameters:
IANA and non-standard property parameters can
be specified on this property.
Conformance:
This property can be specified in recurring "VEVENT",
"VTODO", and "VJOURNAL" calendar components as well as in the
"STANDARD" and "DAYLIGHT" sub-components of the "VTIMEZONE"
calendar component, but it SHOULD NOT be specified more than once.
The recurrence set generated with multiple "RRULE" properties is
undefined.
Description:
The recurrence rule, if specified, is used in computing
the recurrence set. The recurrence set is the complete set of
recurrence instances for a calendar component. The recurrence set
is generated by considering the initial "DTSTART" property along
with the "RRULE", "RDATE", and "EXDATE" properties contained
within the recurring component. The "DTSTART" property defines
the first instance in the recurrence set. The "DTSTART" property
value SHOULD be synchronized with the recurrence rule, if
specified. The recurrence set generated with a "DTSTART" property
value not synchronized with the recurrence rule is undefined. The
final recurrence set is generated by gathering all of the start
DATE-TIME values generated by any of the specified "RRULE" and
"RDATE" properties, and then excluding any start DATE-TIME values
specified by "EXDATE" properties. This implies that start DATE-
TIME values specified by "EXDATE" properties take precedence over
those specified by inclusion properties (i.e., "RDATE" and
"RRULE"). Where duplicate instances are generated by the "RRULE"
and "RDATE" properties, only one recurrence is considered.
Duplicate instances are ignored.
The "DTSTART" property specified within the iCalendar object
defines the first instance of the recurrence. In most cases, a
"DTSTART" property of DATE-TIME value type used with a recurrence
rule, should be specified as a date with local time and time zone
reference to make sure all the recurrence instances start at the
same local time regardless of time zone changes.
If the duration of the recurring component is specified with the
"DTEND" or "DUE" property, then the same exact duration will apply
to all the members of the generated recurrence set. Else, if the
duration of the recurring component is specified with the
"DURATION" property, then the same nominal duration will apply to
all the members of the generated recurrence set and the exact
duration of each recurrence instance will depend on its specific
start time. For example, recurrence instances of a nominal
duration of one day will have an exact duration of more or less
than 24 hours on a day where a time zone shift occurs. The
duration of a specific recurrence may be modified in an exception
component or simply by using an "RDATE" property of PERIOD value
type.
Examples:
Daily for 10 occurrences:
.. code-block:: pycon
>>> from icalendar import Event
>>> from datetime import datetime
>>> from zoneinfo import ZoneInfo
>>> event = Event()
>>> event.start = datetime(1997, 9, 2, 9, 0, tzinfo=ZoneInfo("America/New_York"))
>>> event.add("RRULE", "FREQ=DAILY;COUNT=10")
>>> print(event.to_ical())
BEGIN:VEVENT
DTSTART;TZID=America/New_York:19970902T090000
RRULE:FREQ=DAILY;COUNT=10
END:VEVENT
>>> event.rrules
[vRecur({'FREQ': ['DAILY'], 'COUNT': [10]})]
Daily until December 24, 1997:
.. code-block:: pycon
>>> from icalendar import Event, vRecur
>>> from datetime import datetime
>>> from zoneinfo import ZoneInfo
>>> event = Event()
>>> event.start = datetime(1997, 9, 2, 9, 0, tzinfo=ZoneInfo("America/New_York"))
>>> event.add("RRULE", vRecur({"FREQ": ["DAILY"]}, until=datetime(1997, 12, 24, tzinfo=ZoneInfo("UTC"))))
>>> print(event.to_ical())
BEGIN:VEVENT
DTSTART;TZID=America/New_York:19970902T090000
RRULE:FREQ=DAILY;UNTIL=19971224T000000Z
END:VEVENT
>>> event.rrules
[vRecur({'FREQ': ['DAILY'], 'UNTIL': [datetime.datetime(1997, 12, 24, 0, 0, tzinfo=ZoneInfo(key='UTC'))]})]
.. note::
You cannot modify the RRULE value by modifying the result.
Use :func:`icalendar.cal.Component.add` to add values.
If you want to compute recurrences, have a look at :ref:`Related projects`.
"""
rrules = self.get("RRULE", [])
if not isinstance(rrules, list):
return [rrules]
return rrules
rrules_property = property(_get_rrules)
def multi_language_text_property(main_prop:str, compatibility_prop:str, doc:str) -> property:
"""This creates a text property.
This property can be defined several times with different ``LANGUAGE`` parameters.
Args:
main_prop (str): The property to set and get, such as ``NAME``
compatibility_prop (str): An old property used before, such as ``X-WR-CALNAME``
doc (str): The documentation string
"""
def fget(self: Component) -> Optional[str]:
"""Get the property"""
result = self.get(main_prop, self.get(compatibility_prop))
if isinstance(result, list):
for item in result:
if "LANGUAGE" not in item.params:
return item
return result
def fset(self: Component, value:str):
"""Set the property."""
fdel(self)
self.add(main_prop, value)
def fdel(self: Component):
"""Delete the property."""
self.pop(main_prop, None)
self.pop(compatibility_prop, None)
return property(fget, fset, fdel, doc)
def single_int_property(prop:str, default:int, doc:str) -> property:
"""Create a property for an int value that exists only once.
Args:
prop: The name of the property
default: The default value
doc: The documentation string
"""
def fget(self: Component) -> int:
"""Get the property"""
try:
return int(self.get(prop, default))
except ValueError as e:
raise InvalidCalendar(f"{prop} must be an int") from e
def fset(self: Component, value:int):
"""Set the property."""
fdel(self)
self.add(prop, value)
def fdel(self: Component):
"""Delete the property."""
self.pop(prop, None)
return property(fget, fset, fdel, doc)
def single_utc_property(name: str, docs: str) -> property:
"""Create a property to access a value of datetime in UTC timezone.
Args:
name: name of the property
docs: documentation string
"""
docs = (
f"""The {name} property. datetime in UTC
All values will be converted to a datetime in UTC.
"""
+ docs
)
def fget(self: Component) -> Optional[datetime]:
"""Get the value."""
if name not in self:
return None
dt = self.get(name)
if isinstance(dt, vText):
# we might be in an attribute that is not typed
value = vDDDTypes.from_ical(dt)
else:
value = getattr(dt, "dt", None)
if value is None or not isinstance(value, date):
raise InvalidCalendar(f"{name} must be a datetime in UTC, not {value}")
return tzp.localize_utc(value)
def fset(self: Component, value: datetime):
"""Set the value"""
if not isinstance(value, date):
raise TypeError(f"{name} takes a datetime in UTC, not {value}")
fdel(self)
self.add(name, tzp.localize_utc(value))
def fdel(self: Component):
"""Delete the property."""
self.pop(name, None)
return property(fget, fset, fdel, doc=docs)
def single_string_property(name: str, docs: str, other_name:Optional[str]=None) -> property:
"""Create a property to access a single string value."""
def fget(self: Component) -> str:
"""Get the value."""
result = self.get(name, None if other_name is None else self.get(other_name, None))
if result is None or result == []:
return ""
if isinstance(result, list):
return result[0]
return result
def fset(self: Component, value: str):
"""Set the value"""
fdel(self)
self.add(name, value)
def fdel(self: Component):
"""Delete the property."""
self.pop(name, None)
if other_name is not None:
self.pop(other_name, None)
return property(fget, fset, fdel, doc=docs)
color_property = single_string_property(
"COLOR",
"""This property specifies a color used for displaying the component.
This implements :rfc:`7986` ``COLOR`` property.
Property Parameters:
IANA and non-standard property parameters can
be specified on this property.
Conformance:
This property can be specified once in an iCalendar
object or in ``VEVENT``, ``VTODO``, or ``VJOURNAL`` calendar components.
Description:
This property specifies a color that clients MAY use
when presenting the relevant data to a user. Typically, this
would appear as the "background" color of events or tasks. The
value is a case-insensitive color name taken from the CSS3 set of
names, defined in Section 4.3 of `W3C.REC-css3-color-20110607 <https://www.w3.org/TR/css-color-3/>`_.
Example:
``"turquoise"``, ``"#ffffff"``
.. code-block:: pycon
>>> from icalendar import Todo
>>> todo = Todo()
>>> todo.color = "green"
>>> print(todo.to_ical())
BEGIN:VTODO
COLOR:green
END:VTODO
"""
)
sequence_property = single_int_property(
"SEQUENCE",
0,
"""This property defines the revision sequence number of the calendar component within a sequence of revisions.
Value Type:
INTEGER
Property Parameters:
IANA and non-standard property parameters can be specified on this property.
Conformance:
The property can be specified in "VEVENT", "VTODO", or
"VJOURNAL" calendar component.
Description:
When a calendar component is created, its sequence
number is 0. It is monotonically incremented by the "Organizer's"
CUA each time the "Organizer" makes a significant revision to the
calendar component.
The "Organizer" includes this property in an iCalendar object that
it sends to an "Attendee" to specify the current version of the
calendar component.
The "Attendee" includes this property in an iCalendar object that
it sends to the "Organizer" to specify the version of the calendar
component to which the "Attendee" is referring.
A change to the sequence number is not the mechanism that an
"Organizer" uses to request a response from the "Attendees". The
"RSVP" parameter on the "ATTENDEE" property is used by the
"Organizer" to indicate that a response from the "Attendees" is
requested.
Recurrence instances of a recurring component MAY have different
sequence numbers.
Examples:
The following is an example of this property for a calendar
component that was just created by the "Organizer":
.. code-block:: pycon
>>> from icalendar import Event
>>> event = Event()
>>> event.sequence
0
The following is an example of this property for a calendar
component that has been revised 10 different times by the
"Organizer":
.. code-block:: pycon
>>> from icalendar import Calendar
>>> calendar = Calendar.example("issue_156_RDATE_with_PERIOD_TZID_khal")
>>> event = calendar.events[0]
>>> event.sequence
10
"""
)
def _get_categories(component: Component) -> list[str]:
"""Get all the categories."""
categories : Optional[vCategory|list[vCategory]] = component.get("CATEGORIES")
if isinstance(categories, list):
_set_categories(component, list(itertools.chain.from_iterable(cat.cats for cat in categories)))
return _get_categories(component)
if categories is None:
categories = vCategory([])
component.add("CATEGORIES", categories)
return categories.cats
def _set_categories(component: Component, cats: list[str]) -> None:
"""Set the categories."""
component["CATEGORIES"] = categories = vCategory(cats)
cats.clear()
cats.extend(categories.cats)
categories.cats = cats
def _del_categories(component: Component) -> None:
"""Delete the categories."""
component.pop("CATEGORIES", None)
categories_property = property(
_get_categories,
_set_categories,
_del_categories,
"""This property defines the categories for a component.
Property Parameters:
IANA, non-standard, and language property parameters can be specified on this
property.
Conformance:
The property can be specified within "VEVENT", "VTODO", or "VJOURNAL" calendar
components.
Since :rfc:`7986` it can also be defined on a "VCALENDAR" component.
Description:
This property is used to specify categories or subtypes
of the calendar component. The categories are useful in searching
for a calendar component of a particular type and category.
Within the "VEVENT", "VTODO", or "VJOURNAL" calendar components,
more than one category can be specified as a COMMA-separated list
of categories.
Example:
Below, we add the categories to an event:
.. code-block:: pycon
>>> from icalendar import Event
>>> event = Event()
>>> event.categories = ["Work", "Meeting"]
>>> print(event.to_ical())
BEGIN:VEVENT
CATEGORIES:Work,Meeting
END:VEVENT
>>> event.categories.append("Lecture")
>>> event.categories == ["Work", "Meeting", "Lecture"]
True
.. note::
At present, we do not take the LANGUAGE parameter into account.
"""
)
uid_property = single_string_property(
"UID", """UID specifies the persistent, globally unique identifier for a component.
We recommend using :func:`uuid.uuid4` to generate new values.
Returns:
The value of the UID property as a string or ``""`` if no value is set.
Description:
The "UID" itself MUST be a globally unique identifier.
The generator of the identifier MUST guarantee that the identifier
is unique.
This is the method for correlating scheduling messages with the
referenced "VEVENT", "VTODO", or "VJOURNAL" calendar component.
The full range of calendar components specified by a recurrence
set is referenced by referring to just the "UID" property value
corresponding to the calendar component. The "RECURRENCE-ID"
property allows the reference to an individual instance within the
recurrence set.
This property is an important method for group-scheduling
applications to match requests with later replies, modifications,
or deletion requests. Calendaring and scheduling applications
MUST generate this property in "VEVENT", "VTODO", and "VJOURNAL"
calendar components to assure interoperability with other group-
scheduling applications. This identifier is created by the
calendar system that generates an iCalendar object.
Implementations MUST be able to receive and persist values of at
least 255 octets for this property, but they MUST NOT truncate
values in the middle of a UTF-8 multi-octet sequence.
:rfc:`7986` states that UID can be used, for
example, to identify duplicate calendar streams that a client may
have been given access to. It can be used in conjunction with the
"LAST-MODIFIED" property also specified on the "VCALENDAR" object
to identify the most recent version of a calendar.
Conformance:
:rfc:`5545` states that the "UID" property can be specified on "VEVENT", "VTODO",
and "VJOURNAL" calendar components.
:rfc:`7986` modifies the definition of the "UID" property to
allow it to be defined in an iCalendar object.
:rfc:`9074` adds a "UID" property to "VALARM" components to allow a unique
identifier to be specified. The value of this property can then be used
to refer uniquely to the "VALARM" component.
This property can be specified once only.
Security:
:rfc:`7986` states that UID values MUST NOT include any data that
might identify a user, host, domain, or any other security- or
privacy-sensitive information. It is RECOMMENDED that calendar user
agents now generate "UID" values that are hex-encoded random
Universally Unique Identifier (UUID) values as defined in
Sections 4.4 and 4.5 of :rfc:`4122`.
You can use the :mod:`uuid` module to generate new UUIDs.
Compatibility:
For Alarms, ``X-ALARMUID`` is also considered.
Examples:
The following is an example of such a property value:
``5FC53010-1267-4F8E-BC28-1D7AE55A7C99``.
Set the UID of a calendar:
.. code-block:: pycon
>>> from icalendar import Calendar
>>> from uuid import uuid4
>>> calendar = Calendar()
>>> calendar.uid = uuid4()
>>> print(calendar.to_ical())
BEGIN:VCALENDAR
UID:d755cef5-2311-46ed-a0e1-6733c9e15c63
END:VCALENDAR
"""
)
__all__ = [
"categories_property",
"color_property",
"exdates_property",
"multi_language_text_property",
"rdates_property",
"rrules_property",
"sequence_property",
"single_int_property",
"single_utc_property",
"uid_property",
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,108 @@
from icalendar.parser_tools import to_unicode
from collections import OrderedDict
def canonsort_keys(keys, canonical_order=None):
"""Sorts leading keys according to canonical_order. Keys not specified in
canonical_order will appear alphabetically at the end.
"""
canonical_map = {k: i for i, k in enumerate(canonical_order or [])}
head = [k for k in keys if k in canonical_map]
tail = [k for k in keys if k not in canonical_map]
return sorted(head, key=lambda k: canonical_map[k]) + sorted(tail)
def canonsort_items(dict1, canonical_order=None):
"""Returns a list of items from dict1, sorted by canonical_order."""
return [(k, dict1[k]) for k in canonsort_keys(dict1.keys(), canonical_order)]
class CaselessDict(OrderedDict):
"""A dictionary that isn't case sensitive, and only uses strings as keys.
Values retain their case.
"""
def __init__(self, *args, **kwargs):
"""Set keys to upper for initial dict."""
super().__init__(*args, **kwargs)
for key, value in self.items():
key_upper = to_unicode(key).upper()
if key != key_upper:
super().__delitem__(key)
self[key_upper] = value
def __getitem__(self, key):
key = to_unicode(key)
return super().__getitem__(key.upper())
def __setitem__(self, key, value):
key = to_unicode(key)
super().__setitem__(key.upper(), value)
def __delitem__(self, key):
key = to_unicode(key)
super().__delitem__(key.upper())
def __contains__(self, key):
key = to_unicode(key)
return super().__contains__(key.upper())
def get(self, key, default=None):
key = to_unicode(key)
return super().get(key.upper(), default)
def setdefault(self, key, value=None):
key = to_unicode(key)
return super().setdefault(key.upper(), value)
def pop(self, key, default=None):
key = to_unicode(key)
return super().pop(key.upper(), default)
def popitem(self):
return super().popitem()
def has_key(self, key):
key = to_unicode(key)
return super().__contains__(key.upper())
def update(self, *args, **kwargs):
# Multiple keys where key1.upper() == key2.upper() will be lost.
mappings = list(args) + [kwargs]
for mapping in mappings:
if hasattr(mapping, "items"):
mapping = iter(mapping.items())
for key, value in mapping:
self[key] = value
def copy(self):
return type(self)(super().copy())
def __repr__(self):
return f"{type(self).__name__}({dict(self)})"
def __eq__(self, other):
return self is other or dict(self.items()) == dict(other.items())
def __ne__(self, other):
return not self == other
# A list of keys that must appear first in sorted_keys and sorted_items;
# must be uppercase.
canonical_order = None
def sorted_keys(self):
"""Sorts keys according to the canonical_order for the derived class.
Keys not specified in canonical_order will appear at the end.
"""
return canonsort_keys(self.keys(), self.canonical_order)
def sorted_items(self):
"""Sorts items according to the canonical_order for the derived class.
Items not specified in canonical_order will appear at the end.
"""
return canonsort_items(self, self.canonical_order)
__all__ = ["canonsort_keys", "canonsort_items", "CaselessDict"]

View File

@@ -0,0 +1,105 @@
#!/usr/bin/env python3
"""utility program that allows user to preview calendar's events"""
import sys
import pathlib
import argparse
from datetime import datetime
from icalendar import Calendar, __version__
def _format_name(address):
"""Retrieve the e-mail and the name from an address.
:arg an address object, e.g. mailto:test@test.test
:returns str: The name and the e-mail address.
"""
email = address.split(":")[-1]
name = email.split("@")[0]
if not email:
return ""
return f"{name} <{email}>"
def _format_attendees(attendees):
"""Format the list of attendees.
:arg any attendees: Either a list, a string or a vCalAddress object.
:returns str: Formatted list of attendees.
"""
if isinstance(attendees, str):
attendees = [attendees]
return "\n".join(map(lambda s: s.rjust(len(s) + 5), map(_format_name, attendees)))
def view(event):
"""Make a human readable summary of an iCalendar file.
:returns str: Human readable summary.
"""
summary = event.get("summary", default="")
organizer = _format_name(event.get("organizer", default=""))
attendees = _format_attendees(event.get("attendee", default=[]))
location = event.get("location", default="")
comment = event.get("comment", "")
description = event.get("description", "").split("\n")
description = "\n".join(map(lambda s: s.rjust(len(s) + 5), description))
start = event.decoded("dtstart")
if "duration" in event:
end = event.decoded("dtend", default=start + event.decoded("duration"))
else:
end = event.decoded("dtend", default=start)
duration = event.decoded("duration", default=end - start)
if isinstance(start, datetime):
start = start.astimezone()
start = start.strftime("%c")
if isinstance(end, datetime):
end = end.astimezone()
end = end.strftime("%c")
return f""" Organizer: {organizer}
Attendees:
{attendees}
Summary : {summary}
Starts : {start}
End : {end}
Duration : {duration}
Location : {location}
Comment : {comment}
Description:
{description}"""
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("calendar_files", nargs="+", type=pathlib.Path)
parser.add_argument(
"--output",
"-o",
type=argparse.FileType("w"),
default=sys.stdout,
help="output file",
)
parser.add_argument(
"-v",
"--version",
action="version",
version=f"{parser.prog} version {__version__}",
)
argv = parser.parse_args()
for calendar_file in argv.calendar_files:
with open(calendar_file, encoding="utf-8-sig") as f:
calendar = Calendar.from_ical(f.read())
for event in calendar.walk("vevent"):
argv.output.write(view(event) + "\n\n")
__all__ = ["main", "view"]
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,129 @@
"""Enumerations for different types in the RFCs."""
from enum import Enum as _Enum
class Enum(_Enum):
"""Enum class that can be pickled."""
def __reduce_ex__(self, _p):
"""For pickling."""
return self.__class__, (self._name_,)
class StrEnum(str, Enum):
"""Enum for strings."""
class PARTSTAT(StrEnum):
"""Enum for PARTSTAT from :rfc:`5545`.
Attributes:
``NEEDS_ACTION``,
``ACCEPTED``,
``DECLINED``,
``TENTATIVE``,
``DELEGATED``,
``COMPLETED``,
``IN_PROCESS``
"""
NEEDS_ACTION = "NEEDS-ACTION"
ACCEPTED = "ACCEPTED"
DECLINED = "DECLINED"
TENTATIVE = "TENTATIVE"
DELEGATED = "DELEGATED"
COMPLETED = "COMPLETED"
IN_PROCESS = "IN-PROCESS"
class FBTYPE(StrEnum):
"""Enum for FBTYPE from :rfc:`5545`.
Attributes:
``FREE``,
``BUSY``,
``BUSY-UNAVAILABLE``,
``BUSY-TENTATIVE``
"""
FREE = "FREE"
BUSY = "BUSY"
BUSY_UNAVAILABLE = "BUSY-UNAVAILABLE"
BUSY_TENTATIVE = "BUSY-TENTATIVE"
class CUTYPE(StrEnum):
"""Enum for CTYPE from :rfc:`5545`.
Attributes:
``INDIVIDUAL``,
``GROUP``,
``RESOURCE``,
``ROOM``,
``UNKNOWN``
"""
INDIVIDUAL = "INDIVIDUAL"
GROUP = "GROUP"
RESOURCE = "RESOURCE"
ROOM = "ROOM"
UNKNOWN = "UNKNOWN"
class RELTYPE(StrEnum):
"""Enum for RELTYPE from :rfc:`5545`.
Attributes:
``PARENT``,
``CHILD``,
``SIBLING``
"""
PARENT = "PARENT"
CHILD = "CHILD"
SIBLING = "SIBLING"
class RANGE(StrEnum):
"""Enum for RANGE from :rfc:`5545`.
Attributes:
``THISANDFUTURE``,
``THISANDPRIOR``
"""
THISANDFUTURE = "THISANDFUTURE"
THISANDPRIOR = "THISANDPRIOR" # deprecated
class RELATED(StrEnum):
"""Enum for RELATED from :rfc:`5545`.
Attributes:
``START``,
``END``
"""
START = "START"
END = "END"
class ROLE(StrEnum):
"""Enum for ROLE from :rfc:`5545`.
Attributes:
``CHAIR``,
``REQ-PARTICIPANT``,
``OPT-PARTICIPANT``,
``NON-PARTICIPANT``
"""
CHAIR = "CHAIR"
REQ_PARTICIPANT = "REQ-PARTICIPANT"
OPT_PARTICIPANT = "OPT-PARTICIPANT"
NON_PARTICIPANT = "NON-PARTICIPANT"
__all__ = [
"PARTSTAT",
"FBTYPE",
"CUTYPE",
"RANGE",
"RELATED",
"ROLE",
"RELTYPE",
]

View File

@@ -0,0 +1,67 @@
"""Errors thrown by icalendar."""
class InvalidCalendar(ValueError):
"""The calendar given is not valid.
This calendar does not conform with RFC 5545 or breaks other RFCs.
"""
class IncompleteComponent(ValueError):
"""The component is missing attributes.
The attributes are not required, otherwise this would be
an InvalidCalendar. But in order to perform calculations,
this attribute is required.
This error is not raised in the UPPERCASE properties like .DTSTART,
only in the lowercase computations like .start.
"""
class IncompleteAlarmInformation(ValueError):
"""The alarms cannot be calculated yet because information is missing."""
class LocalTimezoneMissing(IncompleteAlarmInformation):
"""We are missing the local timezone to compute the value.
Use Alarms.set_local_timezone().
"""
class ComponentEndMissing(IncompleteAlarmInformation):
"""We are missing the end of a component that the alarm is for.
Use Alarms.set_end().
"""
class ComponentStartMissing(IncompleteAlarmInformation):
"""We are missing the start of a component that the alarm is for.
Use Alarms.set_start().
"""
class FeatureWillBeRemovedInFutureVersion(DeprecationWarning):
"""This feature will be removed in a future version."""
class WillBeRemovedInVersion7(FeatureWillBeRemovedInFutureVersion):
"""This feature will be removed in icalendar version 7.
Suppress FeatureWillBeRemovedInFutureVersion instead.
"""
__all__ = [
"InvalidCalendar",
"IncompleteComponent",
"IncompleteAlarmInformation",
"LocalTimezoneMissing",
"ComponentEndMissing",
"ComponentStartMissing",
"FeatureWillBeRemovedInFutureVersion",
"WillBeRemovedInVersion7",
]

View File

@@ -0,0 +1,454 @@
"""Parameter access for icalendar.
Related:
- :rfc:`5545`, Section 3.2. Property Parameters
- :rfc:`7986`, Section 6. Property Parameters
- https://github.com/collective/icalendar/issues/798
"""
from __future__ import annotations
import functools
from typing import TYPE_CHECKING, Callable, Optional, TypeVar, Union
from icalendar import enums
if TYPE_CHECKING:
from enum import Enum
from icalendar.parser import Parameters
class IcalendarProperty:
"""Interface provided by properties in icalendar.prop."""
params: Parameters
def _default_return_none() -> Optional[str]:
"""Return None by default."""
return None
def _default_return_string() -> str:
"""Return None by default."""
return ""
T = TypeVar("T")
def string_parameter(
name:str,
doc:str,
default:Callable = _default_return_none,
convert:Optional[Callable[[str], T]] = None,
convert_to:Optional[Callable[[T], str]] = None
) -> property:
"""Return a parameter with a quoted value (case sensitive)."""
if convert_to is None:
convert_to = convert
@functools.wraps(default)
def fget(self: IcalendarProperty) -> Optional[str]:
value = self.params.get(name)
if value is None:
return default()
return convert(value) if convert else value
def fset(self: IcalendarProperty, value: str):
self.params[name] = convert_to(value) if convert_to else value
def fdel(self: IcalendarProperty):
self.params.pop(name, None)
return property(fget, fset, fdel, doc=doc)
ALTREP = string_parameter(
"ALTREP",
"""ALTREP - Specify an alternate text representation for the property value.
Description:
This parameter specifies a URI that points to an
alternate representation for a textual property value. A property
specifying this parameter MUST also include a value that reflects
the default representation of the text value. The URI parameter
value MUST be specified in a quoted-string.
.. note::
While there is no restriction imposed on the URI schemes
allowed for this parameter, Content Identifier (CID) :rfc:`2392`,
HTTP :rfc:`2616`, and HTTPS :rfc:`2818` are the URI schemes most
commonly used by current implementations.
""")
CN = string_parameter(
"CN",
"""Specify the common name to be associated with the calendar user specified.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter specifies the common name
to be associated with the calendar user specified by the property.
The parameter value is text. The parameter value can be used for
display text to be associated with the calendar address specified
by the property.
""",
default=_default_return_string
)
def _default_return_individual() -> enums.CUTYPE|str:
"""Default value."""
return enums.CUTYPE.INDIVIDUAL
def _convert_enum(enum: type[Enum]) -> Callable[[str], Enum]:
def convert(value: str) -> str:
"""Convert if possible."""
try:
return enum(value.upper())
except ValueError:
return value
return convert
CUTYPE = string_parameter(
"CUTYPE",
"""Identify the type of calendar user specified by the property.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter identifies the type of
calendar user specified by the property. If not specified on a
property that allows this parameter, the default is INDIVIDUAL.
Applications MUST treat x-name and iana-token values they don't
recognize the same way as they would the UNKNOWN value.
""", default=_default_return_individual, convert=_convert_enum(enums.CUTYPE))
def quoted_list_parameter(name: str, doc: str) -> property:
"""Return a parameter that contains a quoted list."""
def fget(self: IcalendarProperty) -> tuple[str]:
value = self.params.get(name)
if value is None:
return ()
if isinstance(value, str):
return tuple(value.split(","))
return value
def fset(self: IcalendarProperty, value: str|tuple[str]):
if value == ():
fdel(self)
else:
self.params[name] = (value,) if isinstance(value, str) else value
def fdel(self: IcalendarProperty):
self.params.pop(name, None)
return property(fget, fset, fdel, doc=doc)
DELEGATED_FROM = quoted_list_parameter(
"DELEGATED-FROM",
"""Specify the calendar users that have delegated their participation to the calendar user specified by the property.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. This parameter specifies those calendar
users that have delegated their participation in a group-scheduled
event or to-do to the calendar user specified by the property.
The individual calendar address parameter values MUST each be
specified in a quoted-string.
""")
DELEGATED_TO = quoted_list_parameter(
"DELEGATED-TO",
"""Specify the calendar users to whom the calendar user specified by the property has delegated participation.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. This parameter specifies those calendar
users whom have been delegated participation in a group-scheduled
event or to-do by the calendar user specified by the property.
The individual calendar address parameter values MUST each be
specified in a quoted-string.
""")
DIR = string_parameter(
"DIR",
"""Specify reference to a directory entry associated with the calendar user specified by the property.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter specifies a reference to
the directory entry associated with the calendar user specified by
the property. The parameter value is a URI. The URI parameter
value MUST be specified in a quoted-string.
.. note::
While there is no restriction imposed on the URI schemes
allowed for this parameter, CID :rfc:`2392`, DATA :rfc:`2397`, FILE
:rfc:`1738`, FTP :rfc:`1738`, HTTP :rfc:`2616`, HTTPS :rfc:`2818`, LDAP
:rfc:`4516`, and MID :rfc:`2392` are the URI schemes most commonly
used by current implementations.
""")
def _default_return_busy() -> enums.FBTYPE|str:
"""Default value."""
return enums.FBTYPE.BUSY
FBTYPE = string_parameter(
"FBTYPE",
"""Specify the free or busy time type.
Description:
This parameter specifies the free or busy time type.
The value FREE indicates that the time interval is free for
scheduling. The value BUSY indicates that the time interval is
busy because one or more events have been scheduled for that
interval. The value BUSY-UNAVAILABLE indicates that the time
interval is busy and that the interval can not be scheduled. The
value BUSY-TENTATIVE indicates that the time interval is busy
because one or more events have been tentatively scheduled for
that interval. If not specified on a property that allows this
parameter, the default is BUSY. Applications MUST treat x-name
and iana-token values they don't recognize the same way as they
would the BUSY value.
""", default=_default_return_busy, convert=_convert_enum(enums.FBTYPE))
LANGUAGE = string_parameter(
"LANGUAGE",
"""Specify the language for text values in a property or property parameter.
Description:
This parameter identifies the language of the text in
the property value and of all property parameter values of the
property. The value of the "LANGUAGE" property parameter is that
defined in :rfc:`5646`.
For transport in a MIME entity, the Content-Language header field
can be used to set the default language for the entire body part.
Otherwise, no default language is assumed.
""")
MEMBER = quoted_list_parameter(
"MEMBER",
"""Specify the group or list membership of the calendar user specified by the property.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter identifies the groups or
list membership for the calendar user specified by the property.
The parameter value is either a single calendar address in a
quoted-string or a COMMA-separated list of calendar addresses,
each in a quoted-string. The individual calendar address
parameter values MUST each be specified in a quoted-string.
"""
)
def _default_return_needs_action() -> enums.PARTSTAT|str:
"""Default value."""
return enums.PARTSTAT.NEEDS_ACTION
PARTSTAT = string_parameter(
"PARTSTAT",
"""Specify the participation status for the calendar user specified by the property.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter identifies the
participation status for the calendar user specified by the
property value. The parameter values differ depending on whether
they are associated with a group-scheduled "VEVENT", "VTODO", or
"VJOURNAL". The values MUST match one of the values allowed for
the given calendar component. If not specified on a property that
allows this parameter, the default value is NEEDS-ACTION.
Applications MUST treat x-name and iana-token values they don't
recognize the same way as they would the NEEDS-ACTION value.
""", default=_default_return_needs_action, convert=_convert_enum(enums.PARTSTAT))
def _default_range_none() -> Optional[enums.RANGE|str]:
return None
RANGE = string_parameter(
"RANGE",
"""Specify the effective range of recurrence instances from the instance specified by the recurrence identifier specified by the property.
Description:
This parameter can be specified on a property that
specifies a recurrence identifier. The parameter specifies the
effective range of recurrence instances that is specified by the
property. The effective range is from the recurrence identifier
specified by the property. If this parameter is not specified on
an allowed property, then the default range is the single instance
specified by the recurrence identifier value of the property. The
parameter value can only be "THISANDFUTURE" to indicate a range
defined by the recurrence identifier and all subsequent instances.
The value "THISANDPRIOR" is deprecated by this revision of
iCalendar and MUST NOT be generated by applications.
""", default=_default_range_none, convert=_convert_enum(enums.RANGE))
def _default_related() -> enums.RELATED|str:
return enums.RELATED.START
RELATED = string_parameter(
"RELATED",
"""Specify the relationship of the alarm trigger with respect to the start or end of the calendar component.
Description:
This parameter can be specified on properties that
specify an alarm trigger with a "DURATION" value type. The
parameter specifies whether the alarm will trigger relative to the
start or end of the calendar component. The parameter value START
will set the alarm to trigger off the start of the calendar
component; the parameter value END will set the alarm to trigger
off the end of the calendar component. If the parameter is not
specified on an allowable property, then the default is START.
""", default=_default_related, convert=_convert_enum(enums.RANGE))
def _default_req_participant() -> enums.ROLE|str:
return enums.ROLE.REQ_PARTICIPANT
ROLE = string_parameter(
"ROLE",
"""Specify the participation role for the calendar user specified by the property.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter specifies the participation
role for the calendar user specified by the property in the group
schedule calendar component. If not specified on a property that
allows this parameter, the default value is REQ-PARTICIPANT.
Applications MUST treat x-name and iana-token values they don't
recognize the same way as they would the REQ-PARTICIPANT value.
""", default=_default_req_participant, convert=_convert_enum(enums.ROLE)
)
def boolean_parameter(name: str, default:bool, doc: str) -> property:
def _default() -> bool:
return default
return string_parameter(
name,
doc,
default=_default,
convert=lambda x: x.upper() == "TRUE",
convert_to=lambda x: "TRUE" if x else "FALSE",
)
RSVP = boolean_parameter(
"RSVP",
False,
"""Specify whether there is an expectation of a favor of anreply from the calendar user specified by the property value.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter identifies the expectation
of a reply from the calendar user specified by the property value.
This parameter is used by the "Organizer" to request a
participation status reply from an "Attendee" of a group-scheduled
event or to-do. If not specified on a property that allows this
parameter, the default value is ``False``.
"""
)
SENT_BY = string_parameter(
"SENT-BY",
"""Specify the calendar user that is acting on behalf of the calendar user specified by the property.
Description:
This parameter can be specified on properties with a
CAL-ADDRESS value type. The parameter specifies the calendar user
that is acting on behalf of the calendar user specified by the
property. The parameter value MUST be a mailto URI as defined in
:rfc:`2368`. The individual calendar address parameter values MUST
each be specified in a quoted-string.
"""
)
TZID = string_parameter(
"TZID",
"""Specify the identifier for the time zone definition for a time component in the property value.
Description:
This parameter MUST be specified on the "DTSTART",
"DTEND", "DUE", "EXDATE", and "RDATE" properties when either a
DATE-TIME or TIME value type is specified and when the value is
neither a UTC or a "floating" time. Refer to the DATE-TIME or
TIME value type definition for a description of UTC and "floating
time" formats. This property parameter specifies a text value
that uniquely identifies the "VTIMEZONE" calendar component to be
used when evaluating the time portion of the property. The value
of the "TZID" property parameter will be equal to the value of the
"TZID" property for the matching time zone definition. An
individual "VTIMEZONE" calendar component MUST be specified for
each unique "TZID" parameter value specified in the iCalendar
object.
The parameter MUST be specified on properties with a DATE-TIME
value if the DATE-TIME is not either a UTC or a "floating" time.
Failure to include and follow VTIMEZONE definitions in iCalendar
objects may lead to inconsistent understanding of the local time
at any given location.
The presence of the SOLIDUS character as a prefix, indicates that
this "TZID" represents a unique ID in a globally defined time zone
registry (when such registry is defined).
.. note::
This document does not define a naming convention for
time zone identifiers. Implementers may want to use the naming
conventions defined in existing time zone specifications such
as the public-domain TZ database (TZDB). The specification of
globally unique time zone identifiers is not addressed by this
document and is left for future study.
"""
)
def _default_return_parent() -> enums.RELTYPE:
return enums.RELTYPE.PARENT
RELTYPE = string_parameter(
"RELTYPE",
"""Specify the type of hierarchical relationship associated with the calendar component specified by the property.
Description:
This parameter can be specified on a property that
references another related calendar. The parameter specifies the
hierarchical relationship type of the calendar component
referenced by the property. The parameter value can be PARENT, to
indicate that the referenced calendar component is a superior of
calendar component; CHILD to indicate that the referenced calendar
component is a subordinate of the calendar component; or SIBLING
to indicate that the referenced calendar component is a peer of
the calendar component. If this parameter is not specified on an
allowable property, the default relationship type is PARENT.
Applications MUST treat x-name and iana-token values they don't
recognize the same way as they would the PARENT value.
""", default=_default_return_parent, convert=_convert_enum(enums.RELTYPE))
__all__ = [
"string_parameter",
"quoted_list_parameter",
"ALTREP",
"CN",
"CUTYPE",
"DELEGATED_FROM",
"DELEGATED_TO",
"DIR",
"FBTYPE",
"LANGUAGE",
"MEMBER",
"PARTSTAT",
"RANGE",
"RELATED",
"ROLE",
"RSVP",
"SENT_BY",
"TZID",
]

View File

@@ -0,0 +1,482 @@
"""This module parses and generates contentlines as defined in RFC 5545
(iCalendar), but will probably work for other MIME types with similar syntax.
Eg. RFC 2426 (vCard)
It is stupid in the sense that it treats the content purely as strings. No type
conversion is attempted.
"""
from __future__ import annotations
import os
from icalendar.caselessdict import CaselessDict
from icalendar.parser_tools import DEFAULT_ENCODING, ICAL_TYPE
from icalendar.parser_tools import SEQUENCE_TYPES
from icalendar.parser_tools import to_unicode
import re
def escape_char(text):
"""Format value according to iCalendar TEXT escaping rules."""
assert isinstance(text, (str, bytes))
# NOTE: ORDER MATTERS!
return (
text.replace(r"\N", "\n")
.replace("\\", "\\\\")
.replace(";", r"\;")
.replace(",", r"\,")
.replace("\r\n", r"\n")
.replace("\n", r"\n")
)
def unescape_char(text):
assert isinstance(text, (str, bytes))
# NOTE: ORDER MATTERS!
if isinstance(text, str):
return (
text.replace("\\N", "\\n")
.replace("\r\n", "\n")
.replace("\\n", "\n")
.replace("\\,", ",")
.replace("\\;", ";")
.replace("\\\\", "\\")
)
elif isinstance(text, bytes):
return (
text.replace(b"\\N", b"\\n")
.replace(b"\r\n", b"\n")
.replace(b"\\n", b"\n")
.replace(b"\\,", b",")
.replace(b"\\;", b";")
.replace(b"\\\\", b"\\")
)
def foldline(line, limit=75, fold_sep="\r\n "):
"""Make a string folded as defined in RFC5545
Lines of text SHOULD NOT be longer than 75 octets, excluding the line
break. Long content lines SHOULD be split into a multiple line
representations using a line "folding" technique. That is, a long
line can be split between any two characters by inserting a CRLF
immediately followed by a single linear white-space character (i.e.,
SPACE or HTAB).
"""
assert isinstance(line, str)
assert "\n" not in line
# Use a fast and simple variant for the common case that line is all ASCII.
try:
line.encode("ascii")
except (UnicodeEncodeError, UnicodeDecodeError):
pass
else:
return fold_sep.join(
line[i : i + limit - 1] for i in range(0, len(line), limit - 1)
)
ret_chars = []
byte_count = 0
for char in line:
char_byte_len = len(char.encode(DEFAULT_ENCODING))
byte_count += char_byte_len
if byte_count >= limit:
ret_chars.append(fold_sep)
byte_count = char_byte_len
ret_chars.append(char)
return "".join(ret_chars)
#################################################################
# Property parameter stuff
def param_value(value, always_quote=False):
"""Returns a parameter value."""
if isinstance(value, SEQUENCE_TYPES):
return q_join(map(rfc_6868_escape, value), always_quote=always_quote)
if isinstance(value, str):
return dquote(rfc_6868_escape(value), always_quote=always_quote)
return dquote(rfc_6868_escape(value.to_ical().decode(DEFAULT_ENCODING)))
# Could be improved
# [\w-] because of the iCalendar RFC
# . because of the vCard RFC
NAME = re.compile(r"[\w.-]+")
UNSAFE_CHAR = re.compile('[\x00-\x08\x0a-\x1f\x7f",:;]')
QUNSAFE_CHAR = re.compile('[\x00-\x08\x0a-\x1f\x7f"]')
FOLD = re.compile(b"(\r?\n)+[ \t]")
uFOLD = re.compile("(\r?\n)+[ \t]")
NEWLINE = re.compile(r"\r?\n")
def validate_token(name):
match = NAME.findall(name)
if len(match) == 1 and name == match[0]:
return
raise ValueError(name)
def validate_param_value(value, quoted=True):
validator = QUNSAFE_CHAR if quoted else UNSAFE_CHAR
if validator.findall(value):
raise ValueError(value)
# chars presence of which in parameter value will be cause the value
# to be enclosed in double-quotes
QUOTABLE = re.compile("[,;:]")
def dquote(val, always_quote=False):
"""Enclose parameter values containing [,;:] in double quotes."""
# a double-quote character is forbidden to appear in a parameter value
# so replace it with a single-quote character
val = val.replace('"', "'")
if QUOTABLE.search(val) or always_quote:
return f'"{val}"'
return val
# parsing helper
def q_split(st, sep=",", maxsplit=-1):
"""Splits a string on char, taking double (q)uotes into considderation."""
if maxsplit == 0:
return [st]
result = []
cursor = 0
length = len(st)
inquote = 0
splits = 0
for i, ch in enumerate(st):
if ch == '"':
inquote = not inquote
if not inquote and ch == sep:
result.append(st[cursor:i])
cursor = i + 1
splits += 1
if i + 1 == length or splits == maxsplit:
result.append(st[cursor:])
break
return result
def q_join(lst, sep=",", always_quote=False):
"""Joins a list on sep, quoting strings with QUOTABLE chars."""
return sep.join(dquote(itm, always_quote=always_quote) for itm in lst)
class Parameters(CaselessDict):
"""Parser and generator of Property parameter strings. It knows nothing of
datatypes. Its main concern is textual structure.
"""
# The following paremeters must always be enclosed in double quotes
always_quoted = (
"ALTREP",
"DELEGATED-FROM",
"DELEGATED-TO",
"DIR",
"MEMBER",
"SENT-BY",
# Part of X-APPLE-STRUCTURED-LOCATION
"X-ADDRESS",
"X-TITLE",
)
# this is quoted should one of the values be present
quote_also = {
# This is escaped in the RFC
"CN" : " '",
}
def params(self):
"""In RFC 5545 keys are called parameters, so this is to be consitent
with the naming conventions.
"""
return self.keys()
# TODO?
# Later, when I get more time... need to finish this off now. The last major
# thing missing.
# def _encode(self, name, value, cond=1):
# # internal, for conditional convertion of values.
# if cond:
# klass = types_factory.for_property(name)
# return klass(value)
# return value
#
# def add(self, name, value, encode=0):
# "Add a parameter value and optionally encode it."
# if encode:
# value = self._encode(name, value, encode)
# self[name] = value
#
# def decoded(self, name):
# "returns a decoded value, or list of same"
def to_ical(self, sorted=True):
result = []
items = list(self.items())
if sorted:
items.sort()
for key, value in items:
upper_key = key.upper()
check_quoteable_characters = self.quote_also.get(key.upper())
always_quote = (
upper_key in self.always_quoted or (
check_quoteable_characters and
any(c in value for c in check_quoteable_characters)
)
)
quoted_value = param_value(value, always_quote=always_quote)
if isinstance(quoted_value, str):
quoted_value = quoted_value.encode(DEFAULT_ENCODING)
# CaselessDict keys are always unicode
result.append(upper_key.encode(DEFAULT_ENCODING) + b"=" + quoted_value)
return b";".join(result)
@classmethod
def from_ical(cls, st, strict=False):
"""Parses the parameter format from ical text format."""
# parse into strings
result = cls()
for param in q_split(st, ";"):
try:
key, val = q_split(param, "=", maxsplit=1)
validate_token(key)
# Property parameter values that are not in quoted
# strings are case insensitive.
vals = []
for v in q_split(val, ","):
if v.startswith('"') and v.endswith('"'):
v = v.strip('"')
validate_param_value(v, quoted=True)
vals.append(rfc_6868_unescape(v))
else:
validate_param_value(v, quoted=False)
if strict:
vals.append(rfc_6868_unescape(v.upper()))
else:
vals.append(rfc_6868_unescape(v))
if not vals:
result[key] = val
else:
if len(vals) == 1:
result[key] = vals[0]
else:
result[key] = vals
except ValueError as exc:
raise ValueError(f"{param!r} is not a valid parameter string: {exc}")
return result
def escape_string(val):
# f'{i:02X}'
return (
val.replace(r"\,", "%2C")
.replace(r"\:", "%3A")
.replace(r"\;", "%3B")
.replace(r"\\", "%5C")
)
def unescape_string(val):
return (
val.replace("%2C", ",")
.replace("%3A", ":")
.replace("%3B", ";")
.replace("%5C", "\\")
)
RFC_6868_UNESCAPE_REGEX = re.compile(r"\^\^|\^n|\^'")
def rfc_6868_unescape(param_value: str) -> str:
"""Take care of :rfc:`6868` unescaping.
- ^^ -> ^
- ^n -> system specific newline
- ^' -> "
- ^ with others stay intact
"""
replacements = {
"^^": "^",
"^n": os.linesep,
"^'": '"',
}
return RFC_6868_UNESCAPE_REGEX.sub(lambda m: replacements.get(m.group(0), m.group(0)), param_value)
RFC_6868_ESCAPE_REGEX = re.compile(r'\^|\r\n|\r|\n|"')
def rfc_6868_escape(param_value: str) -> str:
"""Take care of :rfc:`6868` escaping.
- ^ -> ^^
- " -> ^'
- newline -> ^n
"""
replacements = {
"^": "^^",
"\n": "^n",
"\r": "^n",
"\r\n": "^n",
'"': "^'",
}
return RFC_6868_ESCAPE_REGEX.sub(lambda m: replacements.get(m.group(0), m.group(0)), param_value)
def unescape_list_or_string(val):
if isinstance(val, list):
return [unescape_string(s) for s in val]
else:
return unescape_string(val)
#########################################
# parsing and generation of content lines
class Contentline(str):
"""A content line is basically a string that can be folded and parsed into
parts.
"""
def __new__(cls, value, strict=False, encoding=DEFAULT_ENCODING):
value = to_unicode(value, encoding=encoding)
assert "\n" not in value, (
"Content line can not contain unescaped " "new line characters."
)
self = super().__new__(cls, value)
self.strict = strict
return self
@classmethod
def from_parts(cls, name:ICAL_TYPE, params: Parameters, values, sorted=True):
"""Turn a parts into a content line."""
assert isinstance(params, Parameters)
if hasattr(values, "to_ical"):
values = values.to_ical()
else:
from icalendar.prop import vText
values = vText(values).to_ical()
# elif isinstance(values, basestring):
# values = escape_char(values)
# TODO: after unicode only, remove this
# Convert back to unicode, after to_ical encoded it.
name = to_unicode(name)
values = to_unicode(values)
if params:
params = to_unicode(params.to_ical(sorted=sorted))
return cls(f"{name};{params}:{values}")
return cls(f"{name}:{values}")
def parts(self):
"""Split the content line up into (name, parameters, values) parts."""
try:
st = escape_string(self)
name_split = None
value_split = None
in_quotes = False
for i, ch in enumerate(st):
if not in_quotes:
if ch in ":;" and not name_split:
name_split = i
if ch == ":" and not value_split:
value_split = i
if ch == '"':
in_quotes = not in_quotes
name = unescape_string(st[:name_split])
if not name:
raise ValueError("Key name is required")
validate_token(name)
if not value_split:
value_split = i + 1
if not name_split or name_split + 1 == value_split:
raise ValueError("Invalid content line")
params = Parameters.from_ical(
st[name_split + 1 : value_split], strict=self.strict
)
params = Parameters(
(unescape_string(key), unescape_list_or_string(value))
for key, value in iter(params.items())
)
values = unescape_string(st[value_split + 1 :])
return (name, params, values)
except ValueError as exc:
raise ValueError(
f"Content line could not be parsed into parts: '{self}': {exc}"
) from exc
@classmethod
def from_ical(cls, ical, strict=False):
"""Unfold the content lines in an iCalendar into long content lines."""
ical = to_unicode(ical)
# a fold is carriage return followed by either a space or a tab
return cls(uFOLD.sub("", ical), strict=strict)
def to_ical(self):
"""Long content lines are folded so they are less than 75 characters
wide.
"""
return foldline(self).encode(DEFAULT_ENCODING)
class Contentlines(list):
"""I assume that iCalendar files generally are a few kilobytes in size.
Then this should be efficient. for Huge files, an iterator should probably
be used instead.
"""
def to_ical(self):
"""Simply join self."""
return b"\r\n".join(line.to_ical() for line in self if line) + b"\r\n"
@classmethod
def from_ical(cls, st):
"""Parses a string into content lines."""
st = to_unicode(st)
try:
# a fold is carriage return followed by either a space or a tab
unfolded = uFOLD.sub("", st)
lines = cls(Contentline(line) for line in NEWLINE.split(unfolded) if line)
lines.append("") # '\r\n' at the end of every content line
return lines
except Exception:
raise ValueError("Expected StringType with content lines")
__all__ = [
"Contentline",
"Contentlines",
"FOLD",
"NAME",
"NEWLINE",
"Parameters",
"QUNSAFE_CHAR",
"QUOTABLE",
"UNSAFE_CHAR",
"dquote",
"escape_char",
"escape_string",
"foldline",
"param_value",
"q_join",
"q_split",
"rfc_6868_escape",
"rfc_6868_unescape",
"uFOLD",
"unescape_char",
"unescape_list_or_string",
"unescape_string",
"validate_param_value",
"validate_token",
]

View File

@@ -0,0 +1,63 @@
from typing import List, Union
SEQUENCE_TYPES = (list, tuple)
DEFAULT_ENCODING = "utf-8"
ICAL_TYPE = Union[str, bytes]
def from_unicode(value: ICAL_TYPE, encoding="utf-8") -> bytes:
"""
Converts a value to bytes, even if it already is bytes
:param value: The value to convert
:param encoding: The encoding to use in the conversion
:return: The bytes representation of the value
"""
if isinstance(value, bytes):
return value
elif isinstance(value, str):
try:
return value.encode(encoding)
except UnicodeEncodeError:
return value.encode("utf-8", "replace")
else:
return value
def to_unicode(value: ICAL_TYPE, encoding="utf-8-sig") -> str:
"""Converts a value to unicode, even if it is already a unicode string."""
if isinstance(value, str):
return value
elif isinstance(value, bytes):
try:
return value.decode(encoding)
except UnicodeDecodeError:
return value.decode("utf-8-sig", "replace")
else:
return value
def data_encode(
data: Union[ICAL_TYPE, dict, list], encoding=DEFAULT_ENCODING
) -> Union[bytes, List[bytes], dict]:
"""Encode all datastructures to the given encoding.
Currently unicode strings, dicts and lists are supported.
"""
# https://stackoverflow.com/questions/1254454/fastest-way-to-convert-a-dicts-keys-values-from-unicode-to-str
if isinstance(data, str):
return data.encode(encoding)
elif isinstance(data, dict):
return dict(map(data_encode, iter(data.items())))
elif isinstance(data, list) or isinstance(data, tuple):
return list(map(data_encode, data))
else:
return data
__all__ = [
"DEFAULT_ENCODING",
"SEQUENCE_TYPES",
"ICAL_TYPE",
"data_encode",
"from_unicode",
"to_unicode",
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
BEGIN:VALARM
TRIGGER;VALUE=DATE-TIME:19970317T133000Z
REPEAT:4
DURATION:PT15M
ACTION:AUDIO
ATTACH;FMTTYPE=audio/basic:ftp://example.com/pub/sounds/bell-01.aud
END:VALARM

View File

@@ -0,0 +1,8 @@
BEGIN:VALARM
TRIGGER;RELATED=END:-P2D
ACTION:EMAIL
ATTENDEE:mailto:john_doe@example.com
SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING ***
DESCRIPTION:A draft agenda needs to be sent out to the attendees to the weekly managers meeting (MGR-LIST). Attached is a pointer the document template for the agenda file.
ATTACH;FMTTYPE=application/msword:http://example.com/templates/agenda.doc
END:VALARM

View File

@@ -0,0 +1,8 @@
BEGIN:VALARM
TRIGGER;RELATED=START:-P2D
ACTION:EMAIL
ATTENDEE:mailto:john_doe@example.com
SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING ***
DESCRIPTION:A draft agenda needs to be sent out to the attendees to the weekly managers meeting (MGR-LIST). Attached is a pointer the document template for the agenda file.
ATTACH;FMTTYPE=application/msword:http://example.com/templates/agenda.doc
END:VALARM

View File

@@ -0,0 +1 @@
"""Test the getters/setters of components."""

View File

@@ -0,0 +1,54 @@
"""Test the properties of the alarm."""
import pytest
from icalendar.cal import Alarm
from icalendar.error import InvalidCalendar
def test_repeat_absent():
"""Test the absence of REPEAT."""
assert Alarm().REPEAT == 0
def test_repeat_number():
"""Test the absence of REPEAT."""
assert Alarm({"REPEAT": 10}).REPEAT == 10
def test_set_REPEAT():
"""Check setting the value."""
a = Alarm()
a.REPEAT = 10
assert a.REPEAT == 10
def test_set_REPEAT_twice():
"""Check setting the value."""
a = Alarm()
a.REPEAT = 10
a.REPEAT = 20
assert a.REPEAT == 20
def test_add_REPEAT():
"""Check setting the value."""
a = Alarm()
a.add("REPEAT", 10)
assert a.REPEAT == 10
def test_invalid_repeat_value():
"""Check setting the value."""
a = Alarm()
with pytest.raises(ValueError):
a.REPEAT = "asd"
a["REPEAT"] = "asd"
with pytest.raises(InvalidCalendar):
a.REPEAT # noqa: B018
def test_alarm_to_string():
a = Alarm()
a.REPEAT = 11
assert a.to_ical() == b"BEGIN:VALARM\r\nREPEAT:11\r\nEND:VALARM\r\n"

View File

@@ -0,0 +1,92 @@
"""Test common properties of components."""
from datetime import date, datetime, timedelta
import pytest
from icalendar import Event, FreeBusy, Journal, Todo, vDDDTypes
from icalendar.cal import Component
from icalendar.error import InvalidCalendar
@pytest.fixture(params=[Event, Todo, Journal, FreeBusy])
def dtstamp_comp(request):
"""a component to test"""
return request.param()
def test_no_dtstamp(dtstamp_comp):
"""We have None as a value."""
assert dtstamp_comp.DTSTAMP is None
def set_dtstamp_attribute(component: Component, value: date):
"""Use the setter."""
component.DTSTAMP = value
def set_dtstamp_item(component: Component, value: date):
"""Use setitem."""
component["DTSTAMP"] = vDDDTypes(value)
def set_dtstamp_add(component: Component, value: date):
"""Use add."""
component.add("DTSTAMP", value)
@pytest.mark.parametrize(
("value", "timezone", "expected"),
[
(datetime(2024, 10, 11, 23, 1), None, datetime(2024, 10, 11, 23, 1)),
(datetime(2024, 10, 11, 23, 1), "Europe/Berlin", datetime(2024, 10, 11, 21, 1)),
(datetime(2024, 10, 11, 22, 1), "UTC", datetime(2024, 10, 11, 22, 1)),
(date(2024, 10, 10), None, datetime(2024, 10, 10)),
],
)
@pytest.mark.parametrize(
"set_dtstamp", [set_dtstamp_add, set_dtstamp_attribute, set_dtstamp_item]
)
def test_set_value_and_get_it(
dtstamp_comp, value, timezone, expected, tzp, set_dtstamp
):
"""Set and get the DTSTAMP value."""
dtstamp = value if timezone is None else tzp.localize(value, timezone)
set_dtstamp(dtstamp_comp, dtstamp)
in_utc = tzp.localize_utc(expected)
get_value = dtstamp_comp.get("DTSTAMP").dt
assert in_utc == get_value or set_dtstamp != set_dtstamp_attribute
assert in_utc == dtstamp_comp.DTSTAMP
@pytest.mark.parametrize("invalid_value", [None, timedelta()])
def test_set_invalid_value(invalid_value, dtstamp_comp):
"""Check handling of invalid values."""
with pytest.raises(TypeError) as e:
dtstamp_comp.DTSTAMP = invalid_value
assert e.value.args[0] == f"DTSTAMP takes a datetime in UTC, not {invalid_value}"
@pytest.mark.parametrize("invalid_value", [None, vDDDTypes(timedelta())])
def test_get_invalid_value(invalid_value, dtstamp_comp):
"""Check handling of invalid values."""
dtstamp_comp["DTSTAMP"] = invalid_value
with pytest.raises(InvalidCalendar) as e:
dtstamp_comp.DTSTAMP # noqa: B018
assert (
e.value.args[0]
== f"DTSTAMP must be a datetime in UTC, not {getattr(invalid_value, 'dt', invalid_value)}"
)
def test_set_twice(dtstamp_comp, tzp):
"""Set the value twice."""
dtstamp_comp.DTSTAMP = date(2014, 1, 1)
dtstamp_comp.DTSTAMP = date(2014, 1, 2)
assert tzp.localize_utc(datetime(2014, 1, 2)) == dtstamp_comp.DTSTAMP
def test_last_modified(dtstamp_comp, tzp):
"""Check we can set LAST_MODIFIED in the same way as DTSTAMP"""
dtstamp_comp.LAST_MODIFIED = date(2014, 1, 2)
assert tzp.localize_utc(datetime(2014, 1, 2)) == dtstamp_comp.LAST_MODIFIED

View File

@@ -0,0 +1,62 @@
"""This tests the exdate property.
"""
from __future__ import annotations
from datetime import date, datetime
from pprint import pprint
from typing import Union
import pytest
from icalendar import (
Calendar,
Event,
Journal,
TimezoneDaylight,
TimezoneStandard,
Todo,
)
C_EXDATE = Union[Event, Todo, Journal, TimezoneDaylight, TimezoneStandard]
@pytest.fixture(params = [Event, Todo, Journal, TimezoneDaylight, TimezoneStandard])
def c_exdate(request) -> C_EXDATE:
"""Return a component that uses exdate."""
return request.param()
@pytest.fixture(
params=[
lambda _tzp: date(2019, 10, 11),
lambda _tzp: datetime(2000, 1, 13, 12, 1),
lambda tzp: tzp.localize_utc(datetime(2031, 12, 1, 23, 59)),
lambda tzp: tzp.localize(datetime(1984, 1, 13, 13, 1), "Europe/Athens"),
]
)
def exdate(request, tzp):
"""Possible values for an exdate."""
return request.param(tzp)
def test_no_exdates_by_default(c_exdate):
"""We expect no exdate by default."""
assert c_exdate.exdates == []
def test_set_and_retrieve_exdate(exdate, c_exdate):
"""Set the attribute and get the value."""
c_exdate.add("exdate", [exdate])
result = [exdate]
assert c_exdate.exdates == result
def test_set_and_retrieve_exdates_in_list(exdate, c_exdate):
"""Set the attribute and get the value."""
c_exdate.add("exdate", [exdate, exdate])
result = [exdate, exdate]
assert c_exdate.exdates == result
def test_set_and_retrieve_exdates_twice(exdate, c_exdate):
"""Set the attribute and get the value."""
c_exdate.add("exdate", [exdate])
c_exdate.add("exdate", [exdate])
result = [exdate, exdate]
assert c_exdate.exdates == result

View File

@@ -0,0 +1,111 @@
"""This tests the RDATE property.
"""
from __future__ import annotations
from datetime import date, datetime
from pprint import pprint
from typing import Union
import pytest
from icalendar import (
Calendar,
Event,
Journal,
TimezoneDaylight,
TimezoneStandard,
Todo,
)
C_RDATE = Union[Event, Todo, Journal, TimezoneDaylight, TimezoneStandard]
@pytest.fixture(params = [Event, Todo, Journal, TimezoneDaylight, TimezoneStandard])
def c_rdate(request) -> C_RDATE:
"""Return a component that uses RDATE."""
return request.param()
@pytest.fixture(
params=[
lambda _tzp: date(2019, 10, 11),
lambda _tzp: datetime(2000, 1, 13, 12, 1),
lambda tzp: tzp.localize_utc(datetime(2031, 12, 1, 23, 59)),
lambda tzp: tzp.localize(datetime(1984, 1, 13, 13, 1), "Europe/Athens"),
lambda _tzp: ((datetime(2000, 1, 13, 12, 1), datetime(2000, 1, 13, 12, 2))),
lambda tzp: ((tzp.localize_utc(datetime(2001, 1, 13, 12, 1)), tzp.localize_utc(datetime(2001, 1, 13, 12, 2)))),
]
)
def rdate(request, tzp):
"""Possible values for an rdate."""
return request.param(tzp)
def test_no_rdates_by_default(c_rdate):
"""We expect no rdate by default."""
assert c_rdate.rdates == []
def test_set_and_retrieve_rdate(rdate, c_rdate):
"""Set the attribute and get the value."""
c_rdate.add("RDATE", [rdate])
result = [rdate if isinstance(rdate, tuple) else (rdate, None)]
assert c_rdate.rdates == result
def test_get_example_0(calendars):
"""Test an example rdate."""
cal : Calendar = calendars.rfc_5545_RDATE_example
event = cal.events[0]
assert event.rdates == [(datetime(1997, 7, 14, 12, 30), None)]
def test_get_example_1(calendars, tzp):
"""Test an example rdate."""
cal : Calendar = calendars.rfc_5545_RDATE_example
event = cal.events[1]
assert event.rdates == [(tzp.localize_utc(datetime(1997, 7, 14, 12, 30)), None)]
def test_get_example_2(calendars, tzp):
"""Test an example rdate."""
cal : Calendar = calendars.rfc_5545_RDATE_example
event = cal.events[2]
assert event.rdates == [(tzp.localize(datetime(1997, 7, 14, 8, 30), "America/New_York"),None)]
def test_get_example_3(calendars, tzp):
"""Test an example rdate."""
cal : Calendar = calendars.rfc_5545_RDATE_example
event = cal.events[3]
rdates_3 = [
(tzp.localize_utc(datetime(1996, 4, 3, 2)), tzp.localize_utc(datetime(1996, 4, 3, 4))),
(tzp.localize_utc(datetime(1996, 4, 4, 1)), tzp.localize_utc(datetime(1996, 4, 4, 4))),
]
pprint(event.rdates)
pprint(rdates_3)
assert event.rdates == rdates_3
def d(i:int) -> tuple[date, None]:
s = str(i)
return (date(int(s[:4]), int(s[4:6].lstrip("0")), int(s[6:].lstrip("0"))), None)
RDATES_4 = list(map(d, (
19970101,
19970120,
19970217,
19970421,
19970526,
19970704,
19970901,
19971014,
19971128,
19971129,
19971225,
)))
def test_get_example_4(calendars, tzp):
"""Test an example rdate."""
cal : Calendar = calendars.rfc_5545_RDATE_example
event = cal.events[4]
pprint(event.rdates)
pprint(RDATES_4)
assert event.rdates == RDATES_4

View File

@@ -0,0 +1,45 @@
"""Test getting the rrules from a component."""
import pytest
from icalendar import (
Component,
Event,
Journal,
TimezoneDaylight,
TimezoneStandard,
Todo,
vRecur,
)
RRULE_0 = vRecur.from_ical("FREQ=DAILY;COUNT=10")
RRULE_1 = vRecur.from_ical("FREQ=DAILY;UNTIL=19971224T000000Z")
RRULE_2 = vRecur.from_ical("FREQ=DAILY;INTERVAL=2")
RRULE_3 = vRecur.from_ical("FREQ=DAILY;INTERVAL=10;COUNT=5")
RRULE_4 = vRecur.from_ical("FREQ=YEARLY;UNTIL=20000131T140000Z;BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA")
@pytest.fixture(params=[RRULE_0, RRULE_1, RRULE_2, RRULE_3, RRULE_4])
def rrule(request) -> str:
"""An rrule."""
return request.param
@pytest.fixture(params = [Event, Todo, Journal, TimezoneDaylight, TimezoneStandard])
def c_rrule(request) -> Component:
"""Return a component that uses RDATE."""
return request.param()
def test_no_rrules_by_default(c_rrule):
"""We expect no rdate by default."""
assert c_rrule.rrules == []
def test_one_rrule(c_rrule, rrule):
"""Add one rrule."""
c_rrule.add("rrule", rrule)
assert c_rrule.rrules == [rrule]
def test_two_rrules(c_rrule, rrule):
"""Add two rrules."""
c_rrule.add("rrule", rrule)
c_rrule.add("rrule", RRULE_3)
assert c_rrule.rrules == [rrule, RRULE_3]

View File

@@ -0,0 +1,235 @@
BEGIN:VCALENDAR
PRODID:-//Offline Calendar//iCal Import/Export 2.8.1//EN
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
TZURL:http://tzurl.org/zoneinfo/Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19961027T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-000115
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:18471201T000115
RDATE:18471201T000115
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19160521T020000
RDATE:19160521T020000
RDATE:19170408T020000
RDATE:19180324T020000
RDATE:19190330T020000
RDATE:19200328T020000
RDATE:19210403T020000
RDATE:19220326T020000
RDATE:19230422T020000
RDATE:19240413T020000
RDATE:19250419T020000
RDATE:19260418T020000
RDATE:19270410T020000
RDATE:19280422T020000
RDATE:19290421T020000
RDATE:19300413T020000
RDATE:19310419T020000
RDATE:19320417T020000
RDATE:19330409T020000
RDATE:19340422T020000
RDATE:19350414T020000
RDATE:19360419T020000
RDATE:19370418T020000
RDATE:19380410T020000
RDATE:19390416T020000
RDATE:19400225T020000
RDATE:19460414T020000
RDATE:19470316T020000
RDATE:19480314T020000
RDATE:19490403T020000
RDATE:19500416T020000
RDATE:19510415T020000
RDATE:19520420T020000
RDATE:19530419T020000
RDATE:19540411T020000
RDATE:19550417T020000
RDATE:19560422T020000
RDATE:19570414T020000
RDATE:19580420T020000
RDATE:19590419T020000
RDATE:19600410T020000
RDATE:19610326T020000
RDATE:19620325T020000
RDATE:19630331T020000
RDATE:19640322T020000
RDATE:19650321T020000
RDATE:19660320T020000
RDATE:19670319T020000
RDATE:19680218T020000
RDATE:19720319T020000
RDATE:19730318T020000
RDATE:19740317T020000
RDATE:19750316T020000
RDATE:19760321T020000
RDATE:19770320T020000
RDATE:19780319T020000
RDATE:19790318T020000
RDATE:19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19161001T030000
RDATE:19161001T030000
RDATE:19170917T030000
RDATE:19180930T030000
RDATE:19190929T030000
RDATE:19201025T030000
RDATE:19211003T030000
RDATE:19221008T030000
RDATE:19230916T030000
RDATE:19240921T030000
RDATE:19251004T030000
RDATE:19261003T030000
RDATE:19271002T030000
RDATE:19281007T030000
RDATE:19291006T030000
RDATE:19301005T030000
RDATE:19311004T030000
RDATE:19321002T030000
RDATE:19331008T030000
RDATE:19341007T030000
RDATE:19351006T030000
RDATE:19361004T030000
RDATE:19371003T030000
RDATE:19381002T030000
RDATE:19391119T030000
RDATE:19451007T030000
RDATE:19461006T030000
RDATE:19471102T030000
RDATE:19481031T030000
RDATE:19491030T030000
RDATE:19501022T030000
RDATE:19511021T030000
RDATE:19521026T030000
RDATE:19531004T030000
RDATE:19541003T030000
RDATE:19551002T030000
RDATE:19561007T030000
RDATE:19571006T030000
RDATE:19581005T030000
RDATE:19591004T030000
RDATE:19601002T030000
RDATE:19611029T030000
RDATE:19621028T030000
RDATE:19631027T030000
RDATE:19641025T030000
RDATE:19651024T030000
RDATE:19661023T030000
RDATE:19671029T030000
RDATE:19711031T030000
RDATE:19721029T030000
RDATE:19731028T030000
RDATE:19741027T030000
RDATE:19751026T030000
RDATE:19761024T030000
RDATE:19771023T030000
RDATE:19781029T030000
RDATE:19791028T030000
RDATE:19801026T030000
RDATE:19811025T020000
RDATE:19821024T020000
RDATE:19831023T020000
RDATE:19841028T020000
RDATE:19851027T020000
RDATE:19861026T020000
RDATE:19871025T020000
RDATE:19881023T020000
RDATE:19891029T020000
RDATE:19901028T020000
RDATE:19911027T020000
RDATE:19921025T020000
RDATE:19931024T020000
RDATE:19941023T020000
RDATE:19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:BDST
DTSTART:19410504T010000
RDATE:19410504T010000
RDATE:19420405T010000
RDATE:19430404T010000
RDATE:19440402T010000
RDATE:19450402T010000
RDATE:19470413T010000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19410810T030000
RDATE:19410810T030000
RDATE:19420809T030000
RDATE:19430815T030000
RDATE:19440917T030000
RDATE:19450715T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19681026T230000
RDATE:19681026T230000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19960101T000000
RDATE:19960101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20241005T112701Z
UID:17281276213728ad54d03afa44d1ca60b8c52afaece9e@sufficientlysecure.org
SUMMARY:event with alarms android
STATUS:CONFIRMED
DTSTART;TZID=Europe/London:20241005T130000
DTEND:20241005T130000Z
LAST-MODIFIED:20241005T112701Z
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:event with alarms android
END:VALARM
BEGIN:VALARM
TRIGGER:-PT25M
ACTION:DISPLAY
DESCRIPTION:event with alarms android
END:VALARM
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:DISPLAY
DESCRIPTION:event with alarms android
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,235 @@
BEGIN:VCALENDAR
PRODID:-//Offline Calendar//iCal Import/Export 2.8.1//EN
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
TZURL:http://tzurl.org/zoneinfo/Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19961027T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-000115
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:18471201T000115
RDATE:18471201T000115
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19160521T020000
RDATE:19160521T020000
RDATE:19170408T020000
RDATE:19180324T020000
RDATE:19190330T020000
RDATE:19200328T020000
RDATE:19210403T020000
RDATE:19220326T020000
RDATE:19230422T020000
RDATE:19240413T020000
RDATE:19250419T020000
RDATE:19260418T020000
RDATE:19270410T020000
RDATE:19280422T020000
RDATE:19290421T020000
RDATE:19300413T020000
RDATE:19310419T020000
RDATE:19320417T020000
RDATE:19330409T020000
RDATE:19340422T020000
RDATE:19350414T020000
RDATE:19360419T020000
RDATE:19370418T020000
RDATE:19380410T020000
RDATE:19390416T020000
RDATE:19400225T020000
RDATE:19460414T020000
RDATE:19470316T020000
RDATE:19480314T020000
RDATE:19490403T020000
RDATE:19500416T020000
RDATE:19510415T020000
RDATE:19520420T020000
RDATE:19530419T020000
RDATE:19540411T020000
RDATE:19550417T020000
RDATE:19560422T020000
RDATE:19570414T020000
RDATE:19580420T020000
RDATE:19590419T020000
RDATE:19600410T020000
RDATE:19610326T020000
RDATE:19620325T020000
RDATE:19630331T020000
RDATE:19640322T020000
RDATE:19650321T020000
RDATE:19660320T020000
RDATE:19670319T020000
RDATE:19680218T020000
RDATE:19720319T020000
RDATE:19730318T020000
RDATE:19740317T020000
RDATE:19750316T020000
RDATE:19760321T020000
RDATE:19770320T020000
RDATE:19780319T020000
RDATE:19790318T020000
RDATE:19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19161001T030000
RDATE:19161001T030000
RDATE:19170917T030000
RDATE:19180930T030000
RDATE:19190929T030000
RDATE:19201025T030000
RDATE:19211003T030000
RDATE:19221008T030000
RDATE:19230916T030000
RDATE:19240921T030000
RDATE:19251004T030000
RDATE:19261003T030000
RDATE:19271002T030000
RDATE:19281007T030000
RDATE:19291006T030000
RDATE:19301005T030000
RDATE:19311004T030000
RDATE:19321002T030000
RDATE:19331008T030000
RDATE:19341007T030000
RDATE:19351006T030000
RDATE:19361004T030000
RDATE:19371003T030000
RDATE:19381002T030000
RDATE:19391119T030000
RDATE:19451007T030000
RDATE:19461006T030000
RDATE:19471102T030000
RDATE:19481031T030000
RDATE:19491030T030000
RDATE:19501022T030000
RDATE:19511021T030000
RDATE:19521026T030000
RDATE:19531004T030000
RDATE:19541003T030000
RDATE:19551002T030000
RDATE:19561007T030000
RDATE:19571006T030000
RDATE:19581005T030000
RDATE:19591004T030000
RDATE:19601002T030000
RDATE:19611029T030000
RDATE:19621028T030000
RDATE:19631027T030000
RDATE:19641025T030000
RDATE:19651024T030000
RDATE:19661023T030000
RDATE:19671029T030000
RDATE:19711031T030000
RDATE:19721029T030000
RDATE:19731028T030000
RDATE:19741027T030000
RDATE:19751026T030000
RDATE:19761024T030000
RDATE:19771023T030000
RDATE:19781029T030000
RDATE:19791028T030000
RDATE:19801026T030000
RDATE:19811025T020000
RDATE:19821024T020000
RDATE:19831023T020000
RDATE:19841028T020000
RDATE:19851027T020000
RDATE:19861026T020000
RDATE:19871025T020000
RDATE:19881023T020000
RDATE:19891029T020000
RDATE:19901028T020000
RDATE:19911027T020000
RDATE:19921025T020000
RDATE:19931024T020000
RDATE:19941023T020000
RDATE:19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:BDST
DTSTART:19410504T010000
RDATE:19410504T010000
RDATE:19420405T010000
RDATE:19430404T010000
RDATE:19440402T010000
RDATE:19450402T010000
RDATE:19470413T010000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19410810T030000
RDATE:19410810T030000
RDATE:19420809T030000
RDATE:19430815T030000
RDATE:19440917T030000
RDATE:19450715T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19681026T230000
RDATE:19681026T230000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19960101T000000
RDATE:19960101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20241005T113036Z
UID:17281276213728ad54d03afa44d1ca60b8c52afaece9e@sufficientlysecure.org
SUMMARY:event with alarms android
STATUS:CONFIRMED
DTSTART;TZID=Europe/London:20241005T130000
DTEND:20241005T130000Z
LAST-MODIFIED:20241005T112701Z
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:event with alarms android
END:VALARM
BEGIN:VALARM
TRIGGER:-PT25M
ACTION:DISPLAY
DESCRIPTION:event with alarms android
END:VALARM
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:DISPLAY
DESCRIPTION:event with alarms android
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,225 @@
BEGIN:VCALENDAR
PRODID:-//Offline Calendar//iCal Import/Export 2.8.1//EN
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
TZURL:http://tzurl.org/zoneinfo/Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19961027T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:-000115
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:18471201T000115
RDATE:18471201T000115
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19160521T020000
RDATE:19160521T020000
RDATE:19170408T020000
RDATE:19180324T020000
RDATE:19190330T020000
RDATE:19200328T020000
RDATE:19210403T020000
RDATE:19220326T020000
RDATE:19230422T020000
RDATE:19240413T020000
RDATE:19250419T020000
RDATE:19260418T020000
RDATE:19270410T020000
RDATE:19280422T020000
RDATE:19290421T020000
RDATE:19300413T020000
RDATE:19310419T020000
RDATE:19320417T020000
RDATE:19330409T020000
RDATE:19340422T020000
RDATE:19350414T020000
RDATE:19360419T020000
RDATE:19370418T020000
RDATE:19380410T020000
RDATE:19390416T020000
RDATE:19400225T020000
RDATE:19460414T020000
RDATE:19470316T020000
RDATE:19480314T020000
RDATE:19490403T020000
RDATE:19500416T020000
RDATE:19510415T020000
RDATE:19520420T020000
RDATE:19530419T020000
RDATE:19540411T020000
RDATE:19550417T020000
RDATE:19560422T020000
RDATE:19570414T020000
RDATE:19580420T020000
RDATE:19590419T020000
RDATE:19600410T020000
RDATE:19610326T020000
RDATE:19620325T020000
RDATE:19630331T020000
RDATE:19640322T020000
RDATE:19650321T020000
RDATE:19660320T020000
RDATE:19670319T020000
RDATE:19680218T020000
RDATE:19720319T020000
RDATE:19730318T020000
RDATE:19740317T020000
RDATE:19750316T020000
RDATE:19760321T020000
RDATE:19770320T020000
RDATE:19780319T020000
RDATE:19790318T020000
RDATE:19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19161001T030000
RDATE:19161001T030000
RDATE:19170917T030000
RDATE:19180930T030000
RDATE:19190929T030000
RDATE:19201025T030000
RDATE:19211003T030000
RDATE:19221008T030000
RDATE:19230916T030000
RDATE:19240921T030000
RDATE:19251004T030000
RDATE:19261003T030000
RDATE:19271002T030000
RDATE:19281007T030000
RDATE:19291006T030000
RDATE:19301005T030000
RDATE:19311004T030000
RDATE:19321002T030000
RDATE:19331008T030000
RDATE:19341007T030000
RDATE:19351006T030000
RDATE:19361004T030000
RDATE:19371003T030000
RDATE:19381002T030000
RDATE:19391119T030000
RDATE:19451007T030000
RDATE:19461006T030000
RDATE:19471102T030000
RDATE:19481031T030000
RDATE:19491030T030000
RDATE:19501022T030000
RDATE:19511021T030000
RDATE:19521026T030000
RDATE:19531004T030000
RDATE:19541003T030000
RDATE:19551002T030000
RDATE:19561007T030000
RDATE:19571006T030000
RDATE:19581005T030000
RDATE:19591004T030000
RDATE:19601002T030000
RDATE:19611029T030000
RDATE:19621028T030000
RDATE:19631027T030000
RDATE:19641025T030000
RDATE:19651024T030000
RDATE:19661023T030000
RDATE:19671029T030000
RDATE:19711031T030000
RDATE:19721029T030000
RDATE:19731028T030000
RDATE:19741027T030000
RDATE:19751026T030000
RDATE:19761024T030000
RDATE:19771023T030000
RDATE:19781029T030000
RDATE:19791028T030000
RDATE:19801026T030000
RDATE:19811025T020000
RDATE:19821024T020000
RDATE:19831023T020000
RDATE:19841028T020000
RDATE:19851027T020000
RDATE:19861026T020000
RDATE:19871025T020000
RDATE:19881023T020000
RDATE:19891029T020000
RDATE:19901028T020000
RDATE:19911027T020000
RDATE:19921025T020000
RDATE:19931024T020000
RDATE:19941023T020000
RDATE:19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:BDST
DTSTART:19410504T010000
RDATE:19410504T010000
RDATE:19420405T010000
RDATE:19430404T010000
RDATE:19440402T010000
RDATE:19450402T010000
RDATE:19470413T010000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19410810T030000
RDATE:19410810T030000
RDATE:19420809T030000
RDATE:19430815T030000
RDATE:19440917T030000
RDATE:19450715T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19681026T230000
RDATE:19681026T230000
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+0000
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19960101T000000
RDATE:19960101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20241005T130738Z
UID:17281336589228ad54d03afa44d1ca60b8c52afaece9e@sufficientlysecure.org
SUMMARY:event with alarm acknowledged
STATUS:CONFIRMED
DTSTART;TZID=Europe/London:20241005T141700
DTEND:20241005T141700Z
LAST-MODIFIED:20241005T130738Z
BEGIN:VALARM
TRIGGER:-PT10M
ACTION:DISPLAY
DESCRIPTION:event with alarm acknowledged
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,60 @@
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Nicco Kunzmann
X-WR-TIMEZONE:Europe/London
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:GMT+2
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:GMT+1
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART:20241004T181500Z
DTEND:20241004T190000Z
DTSTAMP:20241004T180026Z
UID:79fs7pkqvht9m5igs0vjv1sfra@google.com
CREATED:20241004T175920Z
LAST-MODIFIED:20241004T175928Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:event with alarms
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-P0DT0H10M0S
DESCRIPTION:This is an event reminder
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-P0DT0H14M0S
DESCRIPTION:This is an event reminder
END:VALARM
BEGIN:VALARM
ACTION:EMAIL
ATTENDEE:mailto:niccokunzmann@googlemail.com
TRIGGER:-P0DT0H15M0S
DESCRIPTION:This is an event reminder
SUMMARY:Alarm notification
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-P0DT0H15M0S
DESCRIPTION:This is an event reminder
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,60 @@
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Nicco Kunzmann
X-WR-TIMEZONE:Europe/London
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:GMT+2
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:GMT+1
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART:20241004T181500Z
DTEND:20241004T190000Z
DTSTAMP:20241004T175945Z
UID:79fs7pkqvht9m5igs0vjv1sfra@google.com
CREATED:20241004T175920Z
LAST-MODIFIED:20241004T175928Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:event with alarms
TRANSP:OPAQUE
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-P0DT0H10M0S
DESCRIPTION:This is an event reminder
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-P0DT0H14M0S
DESCRIPTION:This is an event reminder
END:VALARM
BEGIN:VALARM
ACTION:EMAIL
ATTENDEE:mailto:niccokunzmann@googlemail.com
TRIGGER:-P0DT0H15M0S
DESCRIPTION:This is an event reminder
SUMMARY:Alarm notification
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-P0DT0H15M0S
DESCRIPTION:This is an event reminder
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,624 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T173412Z
LAST-MODIFIED:20241023T173453Z
DTSTAMP:20241023T173453Z
UID:731b9b91-cf72-499b-bbc9-c53c28e21fc7
SUMMARY:event
DTSTART;TZID=Europe/London:20241023T190000
DTEND;TZID=Europe/London:20241023T200000
TRANSP:OPAQUE
X-MOZ-GENERATION:2
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT1M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT24M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,626 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T173412Z
LAST-MODIFIED:20241023T173630Z
DTSTAMP:20241023T173630Z
UID:731b9b91-cf72-499b-bbc9-c53c28e21fc7
SUMMARY:event
X-MOZ-LASTACK:20241023T173630Z
DTSTART;TZID=Europe/London:20241023T190000
DTEND;TZID=Europe/London:20241023T200000
TRANSP:OPAQUE
X-MOZ-GENERATION:3
X-MOZ-SNOOZE-TIME:20241023T174130Z
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT1M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT24M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,625 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T173412Z
LAST-MODIFIED:20241023T174207Z
DTSTAMP:20241023T174207Z
UID:731b9b91-cf72-499b-bbc9-c53c28e21fc7
SUMMARY:event
X-MOZ-LASTACK:20241023T174207Z
DTSTART;TZID=Europe/London:20241023T190000
DTEND;TZID=Europe/London:20241023T200000
TRANSP:OPAQUE
X-MOZ-GENERATION:4
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT1M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT24M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,626 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T173412Z
LAST-MODIFIED:20241023T173630Z
DTSTAMP:20241023T173630Z
UID:731b9b91-cf72-499b-bbc9-c53c28e21fc7
SUMMARY:event
X-MOZ-LASTACK:20241023T173630Z
DTSTART;TZID=Europe/London:20241023T190000
DTEND;TZID=Europe/London:20241023T200000
TRANSP:OPAQUE
X-MOZ-GENERATION:3
X-MOZ-SNOOZE-TIME:20241023T174130Z
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT1M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT24M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,624 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T173412Z
LAST-MODIFIED:20241023T173453Z
DTSTAMP:20241023T173453Z
UID:731b9b91-cf72-499b-bbc9-c53c28e21fc7
SUMMARY:event
DTSTART;TZID=Europe/London:20241023T190000
DTEND;TZID=Europe/London:20241023T200000
TRANSP:OPAQUE
X-MOZ-GENERATION:2
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT1M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT24M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,625 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T131035Z
LAST-MODIFIED:20241023T141941Z
DTSTAMP:20241023T141941Z
UID:b9a23b47-f109-4e7a-908c-75e925b27def
SUMMARY:event with alarms
X-MOZ-LASTACK:20241023T141941Z
DTSTART;TZID=Europe/London:20241023T150000
DTEND;TZID=Europe/London:20241023T160000
TRANSP:OPAQUE
X-MOZ-GENERATION:6
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT15M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT45M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,624 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T131035Z
LAST-MODIFIED:20241023T131141Z
DTSTAMP:20241023T131141Z
UID:b9a23b47-f109-4e7a-908c-75e925b27def
SUMMARY:event with alarms
DTSTART;TZID=Europe/London:20241023T150000
DTEND;TZID=Europe/London:20241023T160000
TRANSP:OPAQUE
X-MOZ-GENERATION:2
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT15M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT45M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,626 @@
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/London
X-TZINFO:Europe/London[2024a]
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:-000115
TZNAME:Europe/London(STD)
DTSTART:18471201T000000
RDATE:18471201T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19160521T020000
RDATE:19160521T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19161001T030000
RDATE:19161001T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19170408T020000
RDATE:19170408T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19170917T030000
RDATE:19170917T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19180324T020000
RDATE:19180324T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19180930T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1MO;UNTIL=19190929T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19190330T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19201025T030000
RDATE:19201025T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19210403T020000
RDATE:19210403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19211003T030000
RDATE:19211003T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19220326T020000
RDATE:19220326T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19221008T030000
RDATE:19221008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19230422T020000
RDATE:19230422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19240413T020000
RDATE:19240413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19230916T030000
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3SU;UNTIL=19240921T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19250419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19260418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19270410T020000
RDATE:19270410T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19280422T020000
RDATE:19280422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19290421T020000
RDATE:19290421T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19300413T020000
RDATE:19300413T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19310419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19320417T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19251004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19321002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19330409T020000
RDATE:19330409T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19331008T030000
RDATE:19331008T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19340422T020000
RDATE:19340422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19350414T020000
RDATE:19350414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19360419T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19370418T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19380410T020000
RDATE:19380410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19341007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19381002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19390416T020000
RDATE:19390416T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19400225T020000
RDATE:19400225T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19410504T020000
RDATE:19410504T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19410810T030000
RDATE:19410810T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19420405T020000
RDATE:19420405T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19420809T030000
RDATE:19420809T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19430404T020000
RDATE:19430404T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19430815T030000
RDATE:19430815T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19440402T020000
RDATE:19440402T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19440917T030000
RDATE:19440917T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19450402T020000
RDATE:19450402T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19391119T030000
RDATE:19391119T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19450715T030000
RDATE:19450715T030000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19460414T020000
RDATE:19460414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19470316T020000
RDATE:19470316T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+020000
TZOFFSETFROM:+010000
TZNAME:Europe/London(DST)
DTSTART:19470413T020000
RDATE:19470413T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19451007T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19461006T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+020000
TZNAME:Europe/London(DST)
DTSTART:19470810T030000
RDATE:19470810T030000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19471102T030000
RDATE:19471102T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19480314T020000
RDATE:19480314T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19490403T020000
RDATE:19490403T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19481031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19491030T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19501022T030000
RDATE:19501022T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19511021T030000
RDATE:19511021T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19521026T030000
RDATE:19521026T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19500416T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19530419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19540411T020000
RDATE:19540411T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19550417T020000
RDATE:19550417T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19560422T020000
RDATE:19560422T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19570414T020000
RDATE:19570414T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19580420T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU;UNTIL=19590419T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19600410T020000
RDATE:19600410T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19531004T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU;UNTIL=19601002T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19610326T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19630331T020000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19640322T020000
RDATE:19640322T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19611029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19641025T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19651024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19661023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19650321T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19670319T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19671029T030000
RDATE:19671029T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+010000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19681027T000000
RDATE:19681027T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19680218T020000
RDATE:19680218T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19711031T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19751026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19761024T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19771023T030000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19720319T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SU;UNTIL=19800316T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19781029T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19801026T030000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19811025T020000
RDATE:19811025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19821024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19831023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19841028T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19871025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19881023T020000
RDATE:19881023T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19891029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19921025T020000
END:STANDARD
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19931024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU;UNTIL=19951022T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:Europe/London(DST)
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19960331T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:Europe/London(STD)
DTSTART:19961027T020000
RDATE:19961027T020000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETTO:+010000
TZOFFSETFROM:+000000
TZNAME:(DST)
DTSTART:19970330T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETTO:+000000
TZOFFSETFROM:+010000
TZNAME:(STD)
DTSTART:19971026T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241023T131035Z
LAST-MODIFIED:20241023T135202Z
DTSTAMP:20241023T135202Z
UID:b9a23b47-f109-4e7a-908c-75e925b27def
SUMMARY:event with alarms
X-MOZ-LASTACK:20241023T135202Z
DTSTART;TZID=Europe/London:20241023T150000
DTEND;TZID=Europe/London:20241023T160000
TRANSP:OPAQUE
X-MOZ-GENERATION:4
X-MOZ-SNOOZE-TIME:20241023T135702Z
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT15M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER:-PT45M
DESCRIPTION:Mozilla Standardbeschreibung
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,61 @@
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:custom_America/New_York
LAST-MODIFIED:20050809T050000Z
BEGIN:DAYLIGHT
DTSTART:19670430T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19750223T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19760425T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:noend123
DTSTART;TZID=custom_America/New_York;VALUE=DATE-TIME:20140829T080000
DTEND;TZID=custom_America/New_York;VALUE=DATE-TIME:20140829T100000
SUMMARY:an event with a custom tz name
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,61 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:noend123
DTSTART;TZID=custom_America/New_York_Forward_reference;VALUE=DATE-TIME:20140829T080000
DTSTART;TZID=custom_America/New_York_Forward_reference;VALUE=DATE-TIME:20140829T100000
SUMMARY:an event with a custom tz name
END:VEVENT
BEGIN:VTIMEZONE
TZID:custom_America/New_York_Forward_reference
LAST-MODIFIED:20050809T050000Z
BEGIN:DAYLIGHT
DTSTART:19670430T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19740106T020000
RDATE:19750223T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19760425T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:DAYLIGHT
DTSTART:20070311T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20071104T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

View File

@@ -0,0 +1,41 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT
BEGIN:VEVENT
END:VEVENT

View File

@@ -0,0 +1,2 @@
BEGIN:VCALENDAR
END:VCALENDAR

View File

@@ -0,0 +1,7 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:An Event with too many semicolons
DTSTART;;VALUE=DATE-TIME:20140409T093000
UID:abc
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,7 @@
BEGIN:VCALENDAR
PRODID:-//Plönë.org//NONSGML plone.app.event//EN
VERSION:2.0
X-WR-CALNAME:äöü ÄÖÜ €
X-WR-CALDESC:test non ascii: äöü ÄÖÜ €
X-WR-RELCALID:12345
END:VCALENDAR

View File

@@ -0,0 +1,23 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Plönë.org//NONSGML plone.app.event//EN
X-WR-CALDESC:test non ascii: äöü ÄÖÜ €
X-WR-CALNAME:äöü ÄÖÜ €
X-WR-RELCALID:12345
BEGIN:VEVENT
SUMMARY:Non-ASCII Test: ÄÖÜ äöü €
DTSTART:20101010T100000Z
DTEND:20101010T120000Z
UID:123456
CREATED:20101010T000000Z
DESCRIPTION:icalendar should be able to de/serialize non-ascii.
LOCATION:Tribstrül
END:VEVENT
BEGIN:VEVENT
SUMMARY:åäö
DTSTART:20101010T000000Z
END:VEVENT
BEGIN:VEVENT
DESCRIPTION:äöüßÄÖÜ
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,40 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:collective/icalendar
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Holidays
X-WR-TIMEZONE:Etc/GMT
BEGIN:VEVENT
SUMMARY:New Year's Day
DTSTART:20220101
DTEND:20220101
DESCRIPTION:Happy New Year!
UID:636a0cc1dbd5a1667894465@icalendar
DTSTAMP:20221108T080105Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Orthodox Christmas
DTSTART:20220107
DTEND:20220107
LOCATION:Russia
DESCRIPTION:It is Christmas again!
UID:636a0cc1dbfd91667894465@icalendar
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:International Women's Day
DTSTART:20220308
DTEND:20220308
DESCRIPTION:May the feminine be honoured!
UID:636a0cc1dc0f11667894465@icalendar
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,14 @@
BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20140401T000000Z
DTEND:20140401T010000Z
DTSTAMP:20140401T000000Z
SUMMARY:Broken Eevnt
CLASS:PUBLIC
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
X
END:VCALENDAR

View File

@@ -0,0 +1,25 @@
BEGIN:VCALENDAR
X-SOURCE-URL:https://github.com/pimutils/khal/issues/152#issuecomment-387410353
VERSION:2.0
PRODID:-//PIMUTILS.ORG//NONSGML khal / icalendar //EN
BEGIN:VEVENT
SUMMARY:Event
DTSTART;TZID=America/Chicago;VALUE=DATE-TIME:20180327T080000
DTEND;TZID=America/Chicago;VALUE=DATE-TIME:20180327T090000
DTSTAMP:20180323T200333Z
RECURRENCE-ID;RANGE=THISANDFUTURE:20180327T130000Z
SEQUENCE:10
RDATE;TZID="Central Standard Time";VALUE=PERIOD:20180327T080000/20180327T0
90000,20180403T080000/20180403T090000,20180410T080000/20180410T090000,2018
0417T080000/20180417T090000,20180424T080000/20180424T090000,20180501T08000
0/20180501T090000,20180508T080000/20180508T090000,20180515T080000/20180515
T090000,20180522T080000/20180522T090000,20180529T080000/20180529T090000,20
180605T080000/20180605T090000,20180612T080000/20180612T090000,20180619T080
000/20180619T090000,20180626T080000/20180626T090000,20180703T080000/201807
03T090000,20180710T080000/20180710T090000,20180717T080000/20180717T090000,
20180724T080000/20180724T090000,20180731T080000/20180731T090000
ATTENDEE;CN="XYZ";PARTSTAT=ACCEPTED;ROLE=CHAIR;RSVP=
FALSE:mailto:xyz@xyz.com
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,55 @@
BEGIN:VCALENDAR
X-SOURCE-URL:https://github.com/pimutils/khal/issues/152#issuecomment-933635248
VERSION:2.0
PRODID:-//PIMUTILS.ORG//NONSGML khal / icalendar //EN
BEGIN:VTIMEZONE
TZID:Western/Central Europe
BEGIN:STANDARD
DTSTART:19501029T020000
RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19500326T020000
RRULE:FREQ=YEARLY;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:(omitted)
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T160000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T163000
DTSTAMP:20211004T150245Z
UID:BF5109494E67AAE20025875100566D31-Lotus_Notes_Generated
RECURRENCE-ID;RANGE=THISANDFUTURE:20211101T150000Z
SEQUENCE:0
RDATE;TZID="Western/Central Europe";VALUE=PERIOD:20211101T160000/20211101T
163000,20211206T160000/20211206T163000,20220103T160000/20220103T163000,202
20207T160000/20220207T163000
ATTENDEE;CN="(omitted)";PARTSTAT=ACCEPTED;ROLE=CHAIR;RSVP=FAL
SE:mailto:omitted@example.com
CLASS:PUBLIC
TRANSP:OPAQUE
X-LOTUS-APPTTYPE:3
X-LOTUS-AUDIOVIDEOFLAGS:0
X-LOTUS-BROADCAST:FALSE
X-LOTUS-CHANGE-INST-DATES:20211101T150000Z\,20211206T150000Z\,20220103T150
000Z\,20220207T150000Z
X-LOTUS-CHILD-UID:567EFBAF6CBD07FC0025875100566D3B
X-LOTUS-INITIAL-RDATES:20211101T150000Z\,20211206T150000Z\,20220103T150000
Z\,20220207T150000Z
X-LOTUS-LASTALL-RDATES;TZID="Western/Central Europe":20211101T160000\,2021
1206T160000\,20220103T160000\,20220207T160000
X-LOTUS-NOTESVERSION:2
X-LOTUS-NOTICETYPE:I
X-LOTUS-RECURID;RANGE=THISANDFUTURE:20211101T150000Z
X-LOTUS-UPDATE-SEQ:2
X-LOTUS-UPDATE-WISL:$W:1\;$O:1\;$M:1\;RequiredAttendees:1\;INetRequiredNam
es:1\;AltRequiredNames:1\;StorageRequiredNames:1\;OptionalAttendees:1\;INe
tOptionalNames:1\;AltOptionalNames:1\;StorageOptionalNames:1\;ApptUNIDURL:
1\;STUnyteConferenceURL:1\;STUnyteConferenceID:1\;SametimeType:1\;WhiteBoa
rdContent:1\;STRoomName:1\;$S:2\;$B:2\;$L:2\;$E:2\;$R:2
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,28 @@
BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft CDO for Microsoft Exchange
VERSION:2.0
BEGIN:VTIMEZONE
TZID:GMT +0100 (Standard) / GMT +0200 (Daylight)
BEGIN:STANDARD
DTSTART:16010101T030000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20150703T071009Z
DTSTART;TZID="GMT +0100 (Standard) / GMT +0200 (Daylight)":20150703T100000
SUMMARY:Sprint 25 Daily Standup
DTEND;TZID="GMT +0100 (Standard) / GMT +0200 (Daylight)":20150703T103000
RRULE:FREQ=DAILY;UNTIL=20150722T080000Z;INTERVAL=1;BYDAY=MO, TU, WE, TH, FR
;WKST=SU
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,7 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20150905T090000Z
DTEND:20150905T100000Z
UID:123
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,8 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20150905T090000Z
DTEND:20150905T100000Z
UID:123
X-APPLE-RADIUS=49.91307046514149
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,7 @@
BEGIN:MYCOMPTOO
DTSTAMP:20150121T080000
BEGIN:VEVENT
DTSTART:20150122
UID:12345
END:VEVENT
END:MYCOMPTOO

View File

@@ -0,0 +1,5 @@
BEGIN:VCALENDAR
BEGIN:UNKNOWN
UID:1234
END:UNKNOWN
END:VCALENDAR

View File

@@ -0,0 +1,24 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//TEST//TEST//EN
BEGIN:VTIMEZONE
TZID:UTC+11
BEGIN:STANDARD
DTSTART;VALUE=DATE:20170101
TZNAME:UTC+11
TZOFFSETFROM:+1100
TZOFFSETTO:+1100
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DESCRIPTION:TESTING
DTEND;TZID=UTC+11:20170228T233000
DTSTAMP:20170227T064302Z
DTSTART;TZID=UTC+11:20170228T230000
RESOURCES:Court 4
SEQUENCE:0
STATUS:Confirmed
SUMMARY:TESTIN
UID:1961094_636238800000000000
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,23 @@
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:(UTC-03:00) Brasília
BEGIN:STANDARD
TZNAME:Brasília standard
DTSTART:16010101T235959
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=3SA;BYMONTH=2
END:STANDARD
BEGIN:DAYLIGHT
TZNAME:Brasília daylight
DTSTART:16010101T235959
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SA;BYMONTH=10
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID="(UTC-03:00) Brasília":20170511T133000
DTEND;TZID="(UTC-03:00) Brasília":20170511T140000
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,21 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//davmail.sf.net/NONSGML DavMail Calendar V1.1//EN
METHOD:REPLY
BEGIN:VFREEBUSY
DTSTAMP:20120131T123000Z
ORGANIZER:MAILTO:organizer@domain.tld
DTSTART:20120101T000000Z
DTEND:20120201T000000Z
UID:null
ATTENDEE:MAILTO:attendee@domain.tld
FREEBUSY;FBTYPE=BUSY:20120103T091500Z/20120103T101500Z
FREEBUSY;FBTYPE=BUSY:20120113T130000Z/20120113T150000Z
FREEBUSY;FBTYPE=BUSY:20120116T130000Z/20120116T150000Z
FREEBUSY;FBTYPE=BUSY:20120117T091500Z/20120117T101500Z
FREEBUSY;FBTYPE=BUSY:20120118T160000Z/20120118T163000Z
FREEBUSY;FBTYPE=BUSY:20120124T083000Z/20120124T093000Z
FREEBUSY;FBTYPE=BUSY:20120124T123000Z/20120124T143000Z
FREEBUSY;FBTYPE=BUSY:20120131T091500Z/20120131T101500Z
END:VFREEBUSY
END:VCALENDAR

View File

@@ -0,0 +1,14 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//davmail.sf.net/NONSGML DavMail Calendar V1.1//EN
METHOD:REPLY
BEGIN:VFREEBUSY
DTSTAMP:20120131T123000Z
ORGANIZER:MAILTO:organizer@domain.tld
DTSTART:20120101T000000Z
DTEND:20120201T000000Z
UID:null
ATTENDEE:MAILTO:attendee@domain.tld
FREEBUSY;FBTYPE=BUSY:20120103T091500Z/20120103T101500Z,20120113T130000Z/20120113T150000Z,20120116T130000Z/20120116T150000Z,20120117T091500Z/20120117T101500Z,20120118T160000Z/20120118T163000Z,20120124T083000Z/20120124T093000Z,20120124T123000Z/20120124T143000Z,20120131T091500Z/20120131T101500Z
END:VFREEBUSY
END:VCALENDAR

View File

@@ -0,0 +1,6 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:Event with bare string as argument for categories
CATEGORIES:Lecture
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,32 @@
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
METHOD:PUBLISH
VERSION:2.0
PRODID:-//Sixt//RAC//EN
BEGIN:VFREEBUSY
FREEBUSY;FBTYPE=FREE:20190624T063000Z/20190624T163000Z
ORGANIZER;CN=Sixt SE
X-ORGANIZER2;CN=Sixt SE;CN2=Test!
UID:SIXT_9879691160
DTSTAMP:20190612T104813Z
END:VFREEBUSY
BEGIN:VEVENT
CLASS:PUBLIC
DESCRIPTION:\nVotre véhicule avec le numéro de réservation xxxxxxxxxxx sera à votre disposition le 24.06.2019 à 08:30 heures (heure locale). Retour prévu : Ferney-Voltaire AP de Genève Cointrin Sect(F), le 24.06.2019 à 18:30 heures.\nVous trouverez des informations relatives à la modification ou à l'annulation de votre réservation sous http://www.sixt.fr\n
DTSTART:20190624T063000Z
DTSTAMP:20190612T104813Z
DTEND:20190624T163000Z
LOCATION:Sixt Genève Aéroport secteur France, AP de Genève Cointrin Sect(F), 01210 Ferney-Voltaire, FR
PRIORITY:5
TRANSP:TRANSPARENT
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Sixt : détails de votre réservation
UID:SIXT_9879691160
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:\nLe véhicule avec la n° de réservation xxxxxxxxxxx sera à votre disposition entre 24.06.2019 et 08:30 heures (heure locale) à l'agence Genève Aéroport secteur France. Retour prévu : Ferney-Voltaire AP de Genève Cointrin Sect(F), le 24.06.2019 à 18:30 heures.\nTrouver des informations de localisation et modifier / annuler votre réservation ici: http://www.sixt.fr\n
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,36 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Podio API//EN//view-exporter//52593453
METHOD:REQUEST
X-WR-CALNAME:view52593586
X-WR-TIMEZONE:Europe/Berlin
CALSCALE:GREGORIAN
X-COMMENT-USAGE:This calendar does not contain recurring events!
X-COMMENT-GENERATOR:PHP Version 8.0.16
BEGIN:VEVENT
STATUS:CONFIRMED
SEQUENCE:0
TRANSP:OPAQUE
CLASS:PUBLIC
UID:20055546456446
SUMMARY:Termin 4353 und"so"
DESCRIPTION;ALTREP="data:text/html,%3Cbody%3E%3Cp%3EToller%20%3Cstron
g%20class%3D%22text-bold%22%3ETermin%3C%2Fstrong%3E%20f%C3%BCr%3C%2Fp
%3E%3Cblockquote%3E%3Cp%3Emal%20%3Cem%20class%3D%22text-italic%22%3Ez
u%22gucken%22%3C%2Fem%3E%3C%2Fp%3E%3C%2Fblockquote%3E%3Cp%3E%3Cu%20cl
ass%3D%22text-underline%22%3Eund%3C%2Fu%3E%20%3Cdel%3Eso%3C%2Fdel%3E%
3Cbr%2F%3E%3C%2Fp%3E%3C%2Fbody%3E":Toller Termin fürmal zu\"gucken\"
und so
X-ALT-DESC;FMTTYPE=text/html:<html><head></head><body><p>Toller <stro
ng class="text-bold">Termin</strong> für</p><blockquote><p>mal <em c
lass="text-italic">zu"gucken"</em></p></blockquote><p><u class="text-
underline">und</u> <del>so</del><br/></p></body></html>
URL:https://podio.com/xxxxxxyyyyyy/zpodio-testgelande/apps/calen
dar/items/5
LOCATION:online
DTSTART:20220222T183000Z
DTEND:20220222T193000Z
DTSTAMP:20220220T142821Z
END:VEVENT
END:VCALENDAR
X-COMMENT:Cached from 2022-02-20 14:28:21 - new at most every 1800sec.

View File

@@ -0,0 +1,12 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:0cab49a0-1167-40f0-bfed-ecb4d117047d
DTSTAMP:20221019T102950Z
DTSTART;TZID=/Europe/Stockholm:20221021T200000
DTEND;TZID=/Europe/Stockholm:20221021T210000
SUMMARY:Just chatting
DESCRIPTION:Just Chatting.
CATEGORIES:Just Chatting
RRULE:FREQ=WEEKLY;BYDAY=FR
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,29 @@
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:/Europe/CUSTOM
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:0cab49a0-1167-40f0-bfed-ecb4d117047d
DTSTAMP:20221019T102950Z
DTSTART;TZID=/Europe/CUSTOM:20221021T200000
DTEND;TZID=/Europe/CUSTOM:20221021T210000
SUMMARY:Just chatting
DESCRIPTION:Just Chatting.
CATEGORIES:Just Chatting
RRULE:FREQ=WEEKLY;BYDAY=FR
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,18 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-2023
BEGIN:VEVENT
UID:ical-jacadzaca-3
SUMMARY: Some very different event ':'
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T160000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T163000
DTSTAMP:20211004T150245Z
END:VEVENT
BEGIN:VEVENT
UID:ical-jacadzaca-4
SUMMARY: Some very different other event
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T164000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T165000
DTSTAMP:20211004T150245Z
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,11 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-2023
BEGIN:VEVENT
UID:1
SUMMARY: Some event ':'
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T160000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T163000
DTSTAMP:20211004T150245Z
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,18 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-2023
BEGIN:VEVENT
UID:1
SUMMARY: Some event ':'
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T160000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T163000
DTSTAMP:20211004T150245Z
END:VEVENT
BEGIN:VEVENT
UID:2
SUMMARY: Some other event
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T164000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T165000
DTSTAMP:20211004T150245Z
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,18 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-2023
BEGIN:VEVENT
UID:2
SUMMARY: Some other event
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T164000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T165000
DTSTAMP:20211004T150245Z
END:VEVENT
BEGIN:VEVENT
UID:1
SUMMARY: Some event ':'
DTSTART;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T160000
DTEND;TZID="Western/Central Europe";VALUE=DATE-TIME:20211101T163000
DTSTAMP:20211004T150245Z
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,5 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART;TZID=CUSTOM_tzid;VALUE=DATE-TIME:20140829T080000
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,20 @@
BEGIN:VCALENDAR
DESCRIPTION:We leave the timezones out but we use common names so that they are added.
BEGIN:VEVENT
DTSTART;TZID=America/New_York;VALUE=DATE-TIME:20140829T080000
DTEND;TZID=America/Los_Angeles;VALUE=DATE-TIME:20140829T080000
RDATE;VALUE=PERIOD;TZID=Europe/Berlin:20240913T120000/PT2H
SUMMARY:an event with a custom tz name
END:VEVENT
BEGIN:VEVENT
RECURRENCE-ID;TZID=Europe/Moscow:20190309T020000
END:VEVENT
BEGIN:VTODO
DUE;TZID=Asia/Singapore;VALUE=DATE-TIME:20140829T080000
END:VTODO
BEGIN:VEVENT
RDATE;TZID=Mexico/General:20190309T020000
RDATE;TZID=America/Noronha:20190309T020000
DTSTAMP:19920901T130000Z
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,44 @@
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:MyTimezone
BEGIN:STANDARD
COMMENT:The timezone starts at 2024-01-01 with +12h offset
TZOFFSETFROM:+1000
TZOFFSETTO:+1200
DTSTART:20240101T000000
TZNAME:winter
END:STANDARD
BEGIN:DAYLIGHT
COMMENT:The timezone goes from +12h to +10h at 8 am
TZOFFSETFROM:+1200
TZOFFSETTO:+1000
DTSTART:20240505T080000
TZNAME:summer
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:0
SUMMARY:This event is clearly in winter
DTSTART;TZID=MyTimezone;VALUE=DATE-TIME:20240303T080000
X-TZNAME:winter
END:VEVENT
BEGIN:VEVENT
UID:1
SUMMARY:This event is clearly in summer
X-TZNAME:summer
DTSTART;TZID=MyTimezone;VALUE=DATE-TIME:20240803T080000
END:VEVENT
BEGIN:VEVENT
UID:2
SUMMARY:Transition is from 8am -> 6am, so 8:00:01 is summer
X-TZNAME:summer
DTSTART;TZID=MyTimezone;VALUE=DATE-TIME:20240505T080001
END:VEVENT
BEGIN:VEVENT
UID:3
SUMMARY:Transition is from 8am -> 6am, so 7:00:01 is winter
RFC5545 does not allow us to be at the later TZ.
X-TZNAME:winter
DTSTART;TZID=MyTimezone;VALUE=DATE-TIME:20240505T070001
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,12 @@
BEGIN:VCALENDAR
BEGIN:VFREEBUSY
FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:19970308T160000Z/PT8H30M
END:VFREEBUSY
BEGIN:VFREEBUSY
FREEBUSY:19970308T160000Z/PT3H,19970308T200000Z/PT1H
END:VFREEBUSY
BEGIN:VFREEBUSY
FREEBUSY;FBTYPE=FREE:19970308T160000Z/PT3H,19970308T200000Z/PT1H
,19970308T230000Z/19970309T000000Z
END:VFREEBUSY
END:VCALENDAR

View File

@@ -0,0 +1,8 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
RELATED-TO:jsmith.part7.19960817T083000.xyzMail@example.com
END:VEVENT
BEGIN:VEVENT
RELATED-TO;RELTYPE=SIBLING:19960401-080045-4000F192713@example.com
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,27 @@
BEGIN:VCALENDAR
METHOD:PUBLISH
PRODID:Microsoft Exchange Server 2010
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:minimal-demo-event-est-20241028@example.com
SUMMARY:Anonymous Test Event for TZID
DTSTART;TZID=Eastern Standard Time:20241028T170000
DTEND;TZID=Eastern Standard Time:20241028T180000
DTSTAMP:20250514T023916Z
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,80 @@
BEGIN:VCALENDAR
VERSION
:2.0
PRODID
:-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
METHOD
:PUBLISH
BEGIN:VEVENT
UID
:956630271
SUMMARY
:Christmas Day
CLASS
:PUBLIC
X-MOZILLA-ALARM-DEFAULT-UNITS
:minutes
X-MOZILLA-ALARM-DEFAULT-LENGTH
:15
X-MOZILLA-RECUR-DEFAULT-UNITS
:weeks
X-MOZILLA-RECUR-DEFAULT-INTERVAL
:1
DTSTART
;VALUE=DATE
:20031225
DTEND
;VALUE=DATE
:20031226
DTSTAMP
:20020430T114937Z
END:VEVENT
END:VCALENDAR
BEGIN:VCALENDAR
VERSION
:2.0
PRODID
:-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
METHOD
:PUBLISH
BEGIN:VEVENT
UID
:911737808
SUMMARY
:Boxing Day
CLASS
:PUBLIC
X-MOZILLA-ALARM-DEFAULT-UNITS
:minutes
X-MOZILLA-ALARM-DEFAULT-LENGTH
:15
X-MOZILLA-RECUR-DEFAULT-UNITS
:weeks
X-MOZILLA-RECUR-DEFAULT-INTERVAL
:1
DTSTART
;VALUE=DATE
:20030501
DTSTAMP
:20020430T114937Z
END:VEVENT
BEGIN:VEVENT
UID
:wh4t3v3r
DTSTART;VALUE=DATE:20031225
SUMMARY:Christmas again!
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,52 @@
BEGIN:VCALENDAR
PRODID:-//tzurl.org//NONSGML Olson 2014g//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:custom_Pacific/Fiji
TZURL:http://tzurl.org/zoneinfo/Pacific/Fiji
X-LIC-LOCATION:Pacific/Fiji
BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
DTSTART:20101024T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=21,22,23,24,25,26,27;BYDAY=SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
DTSTART:20140119T020000
RRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=18,19,20,21,22,23,24;BYDAY=SU
END:STANDARD
BEGIN:STANDARD
TZOFFSETFROM:+115544
TZOFFSETTO:+1200
DTSTART:19151026T000000
RDATE:19151026T000000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+1200
TZOFFSETTO:+1300
DTSTART:19981101T020000
RDATE:19981101T020000
RDATE:19991107T020000
RDATE:20091129T020000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
DTSTART:19990228T030000
RDATE:19990228T030000
RDATE:20000227T030000
RDATE:20100328T030000
RDATE:20110306T030000
RDATE:20120122T030000
RDATE:20130120T030000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:noend123
DTSTART;TZID=custom_Pacific/Fiji;VALUE=DATE-TIME:20140829T080000
DTSTART;TZID=custom_Pacific/Fiji;VALUE=DATE-TIME:20140829T100000
SUMMARY:an event with a custom tz name
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,21 @@
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DESCRIPTION:Perfectly OK event
DTSTART;VALUE=DATE:20080303
DTEND;VALUE=DATE:20080304
RRULE:FREQ=DAILY;UNTIL=20080323T235959Z
EXDATE;VALUE=DATE:20080311
END:VEVENT
BEGIN:VEVENT
DESCRIPTION:Wrong event
DTSTART;VALUE=DATE:20080303
DTEND;VALUE=DATE:20080304
RRULE:FREQ=DAILY;UNTIL=20080323T235959Z
EXDATE;VALUE=DATE:20080311
EXDATE;VALUE=DATE:
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,11 @@
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:STANDARD
DTSTART:18500101T000000
TZNAME:PMT
TZOFFSETFROM:+5744
TZOFFSETTO:+5744
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

View File

@@ -0,0 +1,32 @@
BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME;VALUE=TEXT:Test RDATE
BEGIN:VTIMEZONE
TZID:America/Vancouver
BEGIN:STANDARD
DTSTART:20221106T020000
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
RDATE:20231105T020000
TZNAME:PST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20230312T020000
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
RDATE:20240310T020000
TZNAME:PDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:1
DESCRIPTION:Test RDATE
DTSTART;TZID=America/Vancouver:20230920T120000
DTEND;TZID=America/Vancouver:20230920T140000
EXDATE;TZID=America/Vancouver:20231220T120000
RDATE;VALUE=PERIOD;TZID=America/Vancouver:20231213T120000/20231213T150000
RRULE:FREQ=MONTHLY;COUNT=9;INTERVAL=1;BYDAY=+3WE;BYMONTH=1,2,3,4,5,9,10,11,
12;WKST=MO
SUMMARY:Test RDATE
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,7 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:Example calendar with a ': ' in the summary
END:VEVENT
BEGIN:VEVENT
SUMMARY:Another event with a ': ' in the summary
END:VEVENT

View File

@@ -0,0 +1,21 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID://RESEARCH IN MOTION//BIS 3.0
METHOD:REQUEST
BEGIN:VEVENT
SEQUENCE:2
X-RIM-REVISION:0
SUMMARY:Test meeting from BB
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
CLASS:PUBLIC
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="RembrandXS":MAILTO:rembrand@xs4all.nl
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="RembrandDX":MAILTO:rembrand@daxlab.com
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN="RembrandSB":MAILTO:rembspam@xs4all.nl
UID:XRIMCAL-628059586-522954492-9750559
DTSTART;VALUE=DATE:20120814
DTEND;VALUE=DATE:20120815
DESCRIPTION:Test meeting from BB
DTSTAMP:20120813T151458Z
ORGANIZER:mailto:rembrand@daxlab.com
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,33 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:0
RDATE:19970714T123000
END:VEVENT
BEGIN:VEVENT
UID:1
RDATE:19970714T123000Z
END:VEVENT
BEGIN:VEVENT
UID:2
RDATE;TZID=America/New_York:19970714T083000
END:VEVENT
BEGIN:VEVENT
UID:3
RDATE;VALUE=PERIOD:19960403T020000Z/19960403T040000Z,
19960404T010000Z/PT3H
END:VEVENT
BEGIN:VEVENT
UID:4
RDATE;VALUE=DATE:19970101,19970120,19970217,19970421,
19970526,19970704,19970901,19971014,19971128,19971129,19971225
END:VEVENT
BEGIN:VEVENT
UID:5
RDATE;VALUE=DATE:19970101,19970120,19970217,19970421,
19970526,19970704,19970901,19971014,19971128,19971129,19971225
RDATE;VALUE=PERIOD:19960403T020000Z/19960403T040000Z,
19960404T010000Z/PT3H
RDATE:19970714T123000Z
RDATE;TZID=America/New_York:19970714T083000
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,6 @@
BEGIN:VCALENDAR
X-PARAM;NEWLINE=^n;ALL=^^^'^n;UNKNOWN=^a^ ^asd:asd
BEGIN:VEVENT
ATTENDEE;CN=George Herman ^'Babe^' Ruth:mailto:babe@example.com
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,29 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID://RESEARCH IN MOTION//BIS 3.0
METHOD:REQUEST
BEGIN:VEVENT
UID:4.3.1
DTSTART;VALUE=DATE:20130210
RRULE:RSCALE=CHINESE;FREQ=YEARLY
SUMMARY:Chinese New Year
END:VEVENT
BEGIN:VEVENT
UID:4.3.2
DTSTART;VALUE=DATE:20130906
RRULE:RSCALE=ETHIOPIC;FREQ=MONTHLY;BYMONTH=13
SUMMARY:First day of 13th month
END:VEVENT
BEGIN:VEVENT
UID:4.3.3
DTSTART;VALUE=DATE:20140208
RRULE:RSCALE=HEBREW;FREQ=YEARLY;BYMONTH=5L;BYMONTHDAY=8;SKIP=FORWARD
SUMMARY:Anniversary
END:VEVENT
BEGIN:VEVENT
UID:4.3.4
DTSTART;VALUE=DATE:20120229
RRULE:RSCALE=GREGORIAN;FREQ=YEARLY;SKIP=FORWARD
SUMMARY:Anniversary
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,3 @@
BEGIN:VCALENDAR
BEGIN:VEVENT
END:VEVENT

View File

@@ -0,0 +1,3 @@
BEGIN:VCALENDAR
X-SOMETIME;VALUE=TIME:172010
END:VCALENDAR

View File

@@ -0,0 +1,55 @@
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VTIMEZONE
TZID:posix/Europe/Vaduz
BEGIN:STANDARD
TZNAME:CET
TZOFFSETFROM:+002946
TZOFFSETTO:+0100
DTSTART:19011213T211538
RDATE;VALUE=DATE-TIME:19011213T211538
END:STANDARD
BEGIN:DAYLIGHT
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
DTSTART:19810329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:DAYLIGHT
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
DTSTART:19410505T010000
RDATE;VALUE=DATE-TIME:19410505T010000
RDATE;VALUE=DATE-TIME:19420504T010000
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
DTSTART:19810927T030000
RRULE:FREQ=YEARLY;COUNT=15;BYDAY=-1SU;BYMONTH=9
END:STANDARD
BEGIN:STANDARD
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
DTSTART:19961027T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:STANDARD
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
DTSTART:19411006T020000
RDATE;VALUE=DATE-TIME:19411006T020000
RDATE;VALUE=DATE-TIME:19421005T020000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:123
DTSTART;TZID=posix/Europe/Vaduz:20120213T100000
SUMMARY=testevent
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,27 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:Microsoft Exchange Server 2010
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Pacific Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY;LANGUAGE=en-US:Test 4
DTSTART;TZID="Pacific Standard Time":20170224T120000
DTEND;TZID="Pacific Standard Time":20170224T123000
DTSTAMP:20170224T180431Z
UID:040000008200E00074C5B7101A82E0080000000090E19664858ED20100000000000000
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,23 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:Microsoft Exchange Server 2010
BEGIN:VTIMEZONE
TZID:Tokyo Standard Time
BEGIN:STANDARD
DTSTART:16010101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID="Tokyo Standard Time":20170224T120000
DTEND;TZID="Tokyo Standard Time":20170224T123000
UID:blafoobar
SUMMARY:this is an event
END:VEVENT
END:VCALENDARD

View File

@@ -0,0 +1,36 @@
BEGIN:VCALENDAR
PRODID:-//Plone.org//NONSGML plone.app.event//EN
VERSION:2.0
X-WR-CALNAME:test create calendar
X-WR-CALDESC:icalendar test
X-WR-RELCALID:12345
X-WR-TIMEZONE:Europe/Vienna
BEGIN:VTIMEZONE
TZID:Europe/Vienna
X-LIC-LOCATION:Europe/Vienna
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=Europe/Vienna:20120213T100000
DTEND;TZID=Europe/Vienna:20120217T180000
DTSTAMP:20101010T091010Z
CREATED:20101010T091010Z
UID:123456
SUMMARY:artsprint 2012
DESCRIPTION:sprinting at the artsprint
LOCATION:aka bild, wien
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,48 @@
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:ITC
X-WR-TIMEZONE:Europe/Zurich
X-WR-CALDESC:ITC Bookings
BEGIN:VTIMEZONE
TZID:Europe/Zurich
X-LIC-LOCATION:Europe/Zurich
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=Europe/Zurich:20161028T140000
DTEND;TZID=Europe/Zurich:20161028T143000
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
DTSTAMP:20161031T192828Z
UID:BFE33ADD-5553-48B5-B5A5-F9DA5CA4C393
CREATED:20161029T121229Z
DESCRIPTION:Some Description
LAST-MODIFIED:20161029T121229Z
LOCATION:Roadstar 16\n12764 Happyville\nDenmark
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Daily Sync
TRANSP:OPAQUE
X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-ADDRESS="Röadstar 16\n12764 Happyvi
lle\nDenmark";X-APPLE-MAPKIT-HANDLE=CAESARoSCWYTYFhHQBEGfw4hQCIBDQoHRGVubW
FyaxJES0hhcHB5dmlsbGUqSGFwcHl2aWxsZTIHSGFwcHl2aWxsZToEMTI3NjRCDQpSb2Fkc3Rh
cloCMTZiUm9hZHN0YXIgMTYBEU1vcmRvcgENCk1vcmRvcioSUm9hZHN0YXIgMTYyUm9hZHN0YX
IgMTYxMjc2NCBIYXBweXZpbGxlMgdEZW5tYXJrOThA=;X-APPLE-RADIUS=49.913058665846
98;X-APPLE-REFERENCEFRAME=1;X-TITLE=:geo:52.382762,7.528319
END:VEVENT
END:VCALENDAR

View File

@@ -0,0 +1,358 @@
try:
from backports import zoneinfo # type: ignore # noqa: PGH003
except ImportError:
import zoneinfo
from typing import Generator
import pytest
import icalendar
from . import timezone_ids
try:
import pytz
except ImportError:
pytz = None
import itertools
import sys
import uuid
from pathlib import Path
from dateutil import tz
from icalendar.cal import Calendar, Component
from icalendar.timezone import TZP
from icalendar.timezone import tzp as _tzp
HAS_PYTZ = pytz is not None
if HAS_PYTZ:
PYTZ_UTC = [
pytz.utc,
pytz.timezone("UTC"),
]
PYTZ_IN_TIMEZONE = [
lambda dt, tzname: pytz.timezone(tzname).localize(dt),
]
PYTZ_TZP = ["pytz"]
else:
PYTZ_UTC = []
PYTZ_IN_TIMEZONE = []
PYTZ_TZP = []
class DataSource:
"""A collection of parsed ICS elements (e.g calendars, timezones, events)"""
def __init__(self, data_source_folder: Path, parser):
self._parser = parser
self._data_source_folder = data_source_folder
def keys(self):
"""Return all the files that could be used."""
return [
p.stem
for p in self._data_source_folder.iterdir()
if p.suffix.lower() == ".ics"
]
def __getitem__(self, attribute):
"""Parse a file and return the result stored in the attribute."""
if attribute.endswith(".ics"):
source_file = attribute
attribute = attribute[:-4]
else:
source_file = attribute + ".ics"
source_path = self._data_source_folder / source_file
if not source_path.is_file():
raise AttributeError(f"{source_path} does not exist.")
with source_path.open("rb") as f:
raw_ics = f.read()
source = self._parser(raw_ics)
if not isinstance(source, list):
source.raw_ics = raw_ics
source.source_file = source_file
self.__dict__[attribute] = source
return source
def __contains__(self, key):
"""key in self.keys()"""
if key.endswith(".ics"):
key = key[:-4]
return key in self.keys()
def __getattr__(self, key):
return self[key]
def __repr__(self):
return repr(self.__dict__)
@property
def multiple(self):
"""Return a list of all components parsed."""
return self.__class__(
self._data_source_folder, lambda data: self._parser(data, multiple=True)
)
HERE = Path(__file__).parent
CALENDARS_FOLDER = HERE / "calendars"
TIMEZONES_FOLDER = HERE / "timezones"
EVENTS_FOLDER = HERE / "events"
ALARMS_FOLDER = HERE / "alarms"
@pytest.fixture(scope="module")
def calendars(tzp):
return DataSource(CALENDARS_FOLDER, icalendar.Calendar.from_ical)
@pytest.fixture(scope="module")
def timezones(tzp):
return DataSource(TIMEZONES_FOLDER, icalendar.Timezone.from_ical)
@pytest.fixture(scope="module")
def events(tzp):
return DataSource(EVENTS_FOLDER, icalendar.Event.from_ical)
@pytest.fixture(scope="module")
def alarms(tzp):
return DataSource(ALARMS_FOLDER, icalendar.Alarm.from_ical)
@pytest.fixture(params=PYTZ_UTC + [zoneinfo.ZoneInfo("UTC"), tz.UTC, tz.gettz("UTC")])
def utc(request, tzp):
return request.param
@pytest.fixture(
params=PYTZ_IN_TIMEZONE
+ [
lambda dt, tzname: dt.replace(tzinfo=tz.gettz(tzname)),
lambda dt, tzname: dt.replace(tzinfo=zoneinfo.ZoneInfo(tzname)),
]
)
def in_timezone(request, tzp):
return request.param
# exclude broken calendars here
ICS_FILES_EXCLUDE = (
"big_bad_calendar.ics",
"issue_104_broken_calendar.ics",
"small_bad_calendar.ics",
"multiple_calendar_components.ics",
"pr_480_summary_with_colon.ics",
"parsing_error_in_UTC_offset.ics",
"parsing_error.ics",
)
ICS_FILES = [
file.name
for file in itertools.chain(
CALENDARS_FOLDER.iterdir(), TIMEZONES_FOLDER.iterdir(), EVENTS_FOLDER.iterdir()
)
if file.name not in ICS_FILES_EXCLUDE
]
@pytest.fixture(params=ICS_FILES)
def ics_file(tzp, calendars, timezones, events, request):
"""An example ICS file."""
ics_file = request.param
print("example file:", ics_file)
for data in calendars, timezones, events:
if ics_file in data:
return data[ics_file]
raise ValueError(f"Could not find file {ics_file}.")
FUZZ_V1 = [key for key in CALENDARS_FOLDER.iterdir() if "fuzz-testcase" in str(key)]
@pytest.fixture(params=FUZZ_V1)
def fuzz_v1_calendar(request):
"""Clusterfuzz calendars."""
return request.param
@pytest.fixture
def x_sometime():
"""Map x_sometime to time"""
icalendar.cal.types_factory.types_map["X-SOMETIME"] = "time"
yield
icalendar.cal.types_factory.types_map.pop("X-SOMETIME")
@pytest.fixture
def factory():
"""Return a new component factory."""
return icalendar.ComponentFactory()
@pytest.fixture
def vUTCOffset_ignore_exceptions():
icalendar.vUTCOffset.ignore_exceptions = True
yield
icalendar.vUTCOffset.ignore_exceptions = False
@pytest.fixture
def event_component(tzp):
"""Return an event component."""
c = Component()
c.name = "VEVENT"
return c
@pytest.fixture
def c(tzp):
"""Return an empty component."""
c = Component()
return c
comp = c
@pytest.fixture
def calendar_component(tzp):
"""Return an empty component."""
c = Component()
c.name = "VCALENDAR"
return c
@pytest.fixture
def filled_event_component(c, calendar_component):
"""Return an event with some values and add it to calendar_component."""
e = Component(summary="A brief history of time")
e.name = "VEVENT"
e.add("dtend", "20000102T000000", encode=0)
e.add("dtstart", "20000101T000000", encode=0)
calendar_component.add_component(e)
return e
@pytest.fixture()
def calendar_with_resources(tzp):
c = Calendar()
c["resources"] = 'Chair, Table, "Room: 42"'
return c
@pytest.fixture(scope="module")
def tzp(tzp_name) -> Generator[TZP, None, None]:
"""The timezone provider."""
_tzp.use(tzp_name)
yield _tzp
_tzp.use_default()
@pytest.fixture(params=PYTZ_TZP + ["zoneinfo"])
def other_tzp(request, tzp):
"""This is annother timezone provider.
The purpose here is to cross test: pytz <-> zoneinfo.
tzp as parameter makes sure we test the cross product.
"""
return TZP(request.param)
@pytest.fixture
def pytz_only(tzp, tzp_name) -> str:
"""Skip tests that are not running under pytz."""
assert tzp.uses_pytz()
return tzp_name
@pytest.fixture
def zoneinfo_only(tzp, request, tzp_name) -> str:
"""Skip tests that are not running under zoneinfo."""
assert tzp.uses_zoneinfo()
return tzp_name
@pytest.fixture
def no_pytz(tzp_name) -> str:
"""Do not run tests with pytz."""
assert tzp_name != "pytz"
return tzp_name
@pytest.fixture
def no_zoneinfo(tzp_name) -> str:
"""Do not run tests with zoneinfo."""
assert tzp_name != "zoneinfo"
return tzp_name
def pytest_generate_tests(metafunc):
"""Parametrize without skipping:
tzp_name will be parametrized according to the use of
- pytz_only
- zoneinfo_only
- no_pytz
- no_zoneinfo
See https://docs.pytest.org/en/6.2.x/example/parametrize.html#deferring-the-setup-of-parametrized-resources
"""
if "tzp_name" in metafunc.fixturenames:
tzp_names = PYTZ_TZP + ["zoneinfo"]
if "zoneinfo_only" in metafunc.fixturenames:
tzp_names = ["zoneinfo"]
if "pytz_only" in metafunc.fixturenames:
tzp_names = PYTZ_TZP
assert not (
"zoneinfo_only" in metafunc.fixturenames
and "pytz_only" in metafunc.fixturenames
), "Use pytz_only or zoneinfo_only but not both!"
for name in ["pytz", "zoneinfo"]:
if f"no_{name}" in metafunc.fixturenames and name in tzp_names:
tzp_names.remove(name)
metafunc.parametrize("tzp_name", tzp_names, scope="module")
class DoctestZoneInfo(zoneinfo.ZoneInfo):
"""Constent ZoneInfo representation for tests."""
def __repr__(self):
return f"ZoneInfo(key={self.key!r})"
def doctest_print(obj):
"""doctest print"""
if isinstance(obj, bytes):
obj = obj.decode("UTF-8")
print(str(obj).strip().replace("\r\n", "\n").replace("\r", "\n"))
def doctest_import(name, *args, **kw):
"""Replace the import mechanism to skip the whole doctest if we import pytz."""
if name == "pytz":
return pytz
return __import__(name, *args, **kw)
@pytest.fixture
def env_for_doctest(monkeypatch):
"""Modify the environment to make doctests run."""
monkeypatch.setitem(sys.modules, "zoneinfo", zoneinfo)
monkeypatch.setattr(zoneinfo, "ZoneInfo", DoctestZoneInfo)
from icalendar.timezone.zoneinfo import ZONEINFO
uid = uuid.UUID("d755cef5-2311-46ed-a0e1-6733c9e15c63", version=4)
monkeypatch.setattr(uuid, "uuid4", lambda: uid)
monkeypatch.setattr(ZONEINFO, "utc", zoneinfo.ZoneInfo("UTC"))
return {"print": doctest_print}
@pytest.fixture(params=timezone_ids.TZIDS)
def tzid(request: pytest.FixtureRequest) -> str:
"""Return a timezone id to be used with pytz or zoneinfo.
This goes through all the different timezones possible.
"""
return request.param

View File

@@ -0,0 +1,3 @@
BEGIN:VEVENT
ORGANIZER;CN=Society\, 2014:that
END:VEVENT

View File

@@ -0,0 +1,3 @@
BEGIN:VEVENT
ORGANIZER;CN=Society\\ 2014:that
END:VEVENT

View File

@@ -0,0 +1,3 @@
BEGIN:VEVENT
ORGANIZER;CN=Society\; 2014:that
END:VEVENT

View File

@@ -0,0 +1,3 @@
BEGIN:VEVENT
ORGANIZER;CN=Society\: 2014:that
END:VEVENT

View File

@@ -0,0 +1,3 @@
BEGIN:VEVENT
ORGANIZER;CN=that\, that\; %th%%at%\ that\::это\, то\; that\ %th%%at%\:
END:VEVENT

View File

@@ -0,0 +1,7 @@
BEGIN:VEVENT
DTSTART:19960401T010000
DTEND:19960401T020000
RRULE:FREQ=DAILY;COUNT=100
EXDATE:19960402T010000Z,19960403T010000Z,19960404T010000Z
SUMMARY:A recurring event with exdates
END:VEVENT

View File

@@ -0,0 +1,12 @@
BEGIN:VEVENT
DTSTART;TZID=Europe/Vienna:20120327T100000
DTEND;TZID=Europe/Vienna:20120327T180000
RRULE:FREQ=WEEKLY;UNTIL=20120703T080000Z;BYDAY=TU
EXDATE;TZID=Europe/Vienna:20120529T100000
EXDATE;TZID=Europe/Vienna:20120403T100000
EXDATE;TZID=Europe/Vienna:20120410T100000
EXDATE;TZID=Europe/Vienna:20120501T100000
EXDATE;TZID=Europe/Vienna:20120417T100000
DTSTAMP:20130716T120638Z
SUMMARY:A Recurring event with multiple exdates, one per line.
END:VEVENT

View File

@@ -0,0 +1,3 @@
BEGIN:VEVENT
ATTENDEE;RSVP=TRUE:mailto:someone@example.com
END:VEVENT

View File

@@ -0,0 +1,9 @@
BEGIN:VEVENT
DTSTART:20101010T100000Z
DTEND:20101010T120000Z
CREATED:20101010T100000Z
UID:123456
SUMMARY:Non-ASCII Test: ÄÖÜ äöü €
DESCRIPTION:icalendar should be able to handle non-ascii: €äüöÄÜÖ.
LOCATION:Tribstrül
END:VEVENT

View File

@@ -0,0 +1,3 @@
BEGIN:VEVENT
ORGANIZER;CN="Джон Доу":mailto:john.doe@example.org
END:VEVENT

Some files were not shown because too many files have changed in this diff Show More