Merge lp:~renatofilho/indicator-datetime/ignore-alarms-with-invalid-actions into lp:indicator-datetime
- ignore-alarms-with-invalid-actions
- Merge into trunk.16.10
Proposed by
Renato Araujo Oliveira Filho
Status: | Merged |
---|---|
Approved by: | Charles Kerr |
Approved revision: | 457 |
Merged at revision: | 455 |
Proposed branch: | lp:~renatofilho/indicator-datetime/ignore-alarms-with-invalid-actions |
Merge into: | lp:indicator-datetime |
Diff against target: |
1277 lines (+1209/-4) 4 files modified
src/engine-eds.cpp (+138/-4) tests/CMakeLists.txt (+1/-0) tests/test-eds-ics-repeating-events-with-individual-change.cpp (+101/-0) tests/test-eds-ics-repeating-events-with-individual-change.ics.in (+969/-0) |
To merge this branch: | bzr merge lp:~renatofilho/indicator-datetime/ignore-alarms-with-invalid-actions |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Charles Kerr (community) | Approve | ||
PS Jenkins bot | continuous-integration | Pending | |
Review via email: mp+297719@code.launchpad.net |
Commit message
Fetch individual detached instances for recurrence events.
Ignore alarms with invalid actions.
Description of the change
How to test:
1 - Create a new event that repeats every day starting yesterday
3 - Make sure that the event appears on the indicator
4 - Edit TODAY instance of the event, change title and time of the intance only
5 - Make sure that the indicator get update with the new event info
To post a comment you must log in.
- 452. By Renato Araujo Oliveira Filho
-
Add comments.
- 453. By Renato Araujo Oliveira Filho
-
Fetch deatached instances of events.
- 454. By Renato Araujo Oliveira Filho
-
Update comments.
- 455. By Renato Araujo Oliveira Filho
-
Create unit test
Revision history for this message
Charles Kerr (charlesk) wrote : | # |
- 456. By Renato Araujo Oliveira Filho
-
Fixed typos;
Updated code based on review requests. - 457. By Renato Araujo Oliveira Filho
-
Check for null before create std::string from uid.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/engine-eds.cpp' |
2 | --- src/engine-eds.cpp 2016-05-14 02:07:10 +0000 |
3 | +++ src/engine-eds.cpp 2016-06-28 15:52:52 +0000 |
4 | @@ -569,6 +569,7 @@ |
5 | std::string color; |
6 | GList *components; |
7 | GList *instance_components; |
8 | + std::set<std::string> parent_components; |
9 | |
10 | ClientSubtask(const std::shared_ptr<Task>& task_in, |
11 | ECalClient* client_in, |
12 | @@ -641,16 +642,146 @@ |
13 | const gchar *uid = nullptr; |
14 | e_cal_component_get_uid (comp, &uid); |
15 | g_object_ref(comp); |
16 | - if (e_cal_component_is_instance(comp)) |
17 | + |
18 | + if (e_cal_component_is_instance(comp) && (uid != nullptr)) { |
19 | + subtask->parent_components.insert(std::string(uid)); |
20 | subtask->instance_components = g_list_append(subtask->instance_components, comp); |
21 | - else |
22 | + } else { |
23 | subtask->components = g_list_append(subtask->components, comp); |
24 | + } |
25 | return TRUE; |
26 | } |
27 | |
28 | static void |
29 | + merge_detached_instances(ClientSubtask *subtask, GSList *instances) |
30 | + { |
31 | + for (GSList *i=instances; i!=nullptr; i=i->next) { |
32 | + auto instance = static_cast<ECalComponent*>(i->data); |
33 | + auto instance_id = e_cal_component_get_id(instance); |
34 | + for (GList *c=subtask->instance_components ; c!= nullptr; c=c->next) { |
35 | + auto component = static_cast<ECalComponent*>(c->data); |
36 | + auto component_id = e_cal_component_get_id(component); |
37 | + bool found = false; |
38 | + |
39 | + if (e_cal_component_id_equal(instance_id, component_id)) { |
40 | + // replaces virtual instance with the real one |
41 | + g_object_unref(component); |
42 | + c->data = g_object_ref(instance); |
43 | + found = true; |
44 | + } |
45 | + e_cal_component_free_id(component_id); |
46 | + if (found) |
47 | + break; |
48 | + } |
49 | + e_cal_component_free_id (instance_id); |
50 | + } |
51 | + } |
52 | + |
53 | + static void |
54 | + fetch_detached_instances(GObject *, |
55 | + GAsyncResult *res, |
56 | + gpointer gsubtask) |
57 | + { |
58 | + auto subtask = static_cast<ClientSubtask*>(gsubtask); |
59 | + if (res) { |
60 | + GError *error = nullptr; |
61 | + GSList *comps = nullptr; |
62 | + e_cal_client_get_objects_for_uid_finish(subtask->client, |
63 | + res, |
64 | + &comps, |
65 | + &error); |
66 | + if (error) { |
67 | + g_warning("Fail to retrieve detached instances: %s", error->message); |
68 | + g_error_free(error); |
69 | + } else { |
70 | + merge_detached_instances(subtask, comps); |
71 | + e_cal_client_free_ecalcomp_slist(comps); |
72 | + } |
73 | + } |
74 | + |
75 | + if (subtask->parent_components.empty()) { |
76 | + on_event_fetch_list_done(gsubtask); |
77 | + return; |
78 | + } |
79 | + |
80 | + // continue fetch detached instances |
81 | + auto i_begin = subtask->parent_components.begin(); |
82 | + std::string id = *i_begin; |
83 | + subtask->parent_components.erase(i_begin); |
84 | + e_cal_client_get_objects_for_uid(subtask->client, |
85 | + id.c_str(), |
86 | + subtask->cancellable.get(), |
87 | + (GAsyncReadyCallback) fetch_detached_instances, |
88 | + gsubtask); |
89 | + } |
90 | + |
91 | + static void |
92 | on_event_generated_list_ready(gpointer gsubtask) |
93 | { |
94 | + fetch_detached_instances(nullptr, nullptr, gsubtask); |
95 | + } |
96 | + |
97 | + static gint |
98 | + sort_events_by_start_date(ECalComponent *eventA, ECalComponent *eventB) |
99 | + { |
100 | + ECalComponentDateTime start_date_a; |
101 | + ECalComponentDateTime start_date_b; |
102 | + |
103 | + e_cal_component_get_dtstart(eventA, &start_date_a); |
104 | + e_cal_component_get_dtstart(eventB, &start_date_b); |
105 | + |
106 | + auto time_a = icaltime_as_timet(*start_date_a.value); |
107 | + auto time_b = icaltime_as_timet(*start_date_b.value); |
108 | + if (time_a == time_b) |
109 | + return 0; |
110 | + if (time_a < time_b) |
111 | + return -1; |
112 | + return 1; |
113 | + } |
114 | + |
115 | + static bool |
116 | + is_alarm_interesting(ECalComponentAlarm *alarm) |
117 | + { |
118 | + if (alarm) { |
119 | + ECalComponentAlarmAction action; |
120 | + e_cal_component_alarm_get_action(alarm, &action); |
121 | + if ((action == E_CAL_COMPONENT_ALARM_AUDIO) || |
122 | + (action == E_CAL_COMPONENT_ALARM_DISPLAY)) { |
123 | + return true; |
124 | + } |
125 | + } |
126 | + return false; |
127 | + } |
128 | + |
129 | + // we only care about AUDIO or DISPLAY alarms, other kind of alarm will not generate a notification |
130 | + static bool |
131 | + event_has_valid_alarms(ECalComponent *event) |
132 | + { |
133 | + if (!e_cal_component_has_alarms(event)) |
134 | + return false; |
135 | + |
136 | + // check alarms |
137 | + bool valid = false; |
138 | + auto uids = e_cal_component_get_alarm_uids(event); |
139 | + for (auto l=uids; l!=nullptr; l=uids->next) { |
140 | + auto auid = static_cast<gchar*>(l->data); |
141 | + auto alarm = e_cal_component_get_alarm(event, auid); |
142 | + |
143 | + valid = is_alarm_interesting(alarm); |
144 | + if (valid) { |
145 | + break; |
146 | + } |
147 | + } |
148 | + |
149 | + cal_obj_uid_list_free(uids); |
150 | + return valid; |
151 | + } |
152 | + |
153 | + |
154 | + |
155 | + static void |
156 | + on_event_fetch_list_done(gpointer gsubtask) |
157 | + { |
158 | auto subtask = static_cast<ClientSubtask*>(gsubtask); |
159 | |
160 | // generate alarms |
161 | @@ -687,10 +818,11 @@ |
162 | add_alarms_to_subtask(static_cast<ECalComponentAlarms*>(l->data), subtask, subtask->task->gtz); |
163 | |
164 | subtask->components = g_list_concat(subtask->components, subtask->instance_components); |
165 | + subtask->components = g_list_sort(subtask->components, (GCompareFunc) sort_events_by_start_date); |
166 | // add events without alarm |
167 | for (auto l=subtask->components; l!=nullptr; l=l->next) { |
168 | auto component = static_cast<ECalComponent*>(l->data); |
169 | - if (!e_cal_component_has_alarms(component)) |
170 | + if (!event_has_valid_alarms(component)) |
171 | add_event_to_subtask(component, subtask, subtask->task->gtz); |
172 | } |
173 | g_list_free_full(subtask->components, g_object_unref); |
174 | @@ -935,8 +1067,10 @@ |
175 | { |
176 | auto ai = static_cast<ECalComponentAlarmInstance*>(l->data); |
177 | auto a = e_cal_component_get_alarm(component, ai->auid); |
178 | - if (a == nullptr) |
179 | + |
180 | + if (!is_alarm_interesting(a)) { |
181 | continue; |
182 | + } |
183 | |
184 | auto instance_time = std::make_pair(DateTime{gtz, ai->occur_start}, |
185 | DateTime{gtz, ai->occur_end}); |
186 | |
187 | === modified file 'tests/CMakeLists.txt' |
188 | --- tests/CMakeLists.txt 2016-05-14 02:07:10 +0000 |
189 | +++ tests/CMakeLists.txt 2016-06-28 15:52:52 +0000 |
190 | @@ -98,6 +98,7 @@ |
191 | add_eds_ics_test_by_name(test-eds-ics-tzids-2) |
192 | add_eds_ics_test_by_name(test-eds-ics-tzids-utc) |
193 | add_eds_ics_test_by_name(test-eds-ics-non-attending-alarms) |
194 | +add_eds_ics_test_by_name(test-eds-ics-repeating-events-with-individual-change) |
195 | |
196 | |
197 | # disabling the timezone unit tests because they require |
198 | |
199 | === added file 'tests/test-eds-ics-repeating-events-with-individual-change.cpp' |
200 | --- tests/test-eds-ics-repeating-events-with-individual-change.cpp 1970-01-01 00:00:00 +0000 |
201 | +++ tests/test-eds-ics-repeating-events-with-individual-change.cpp 2016-06-28 15:52:52 +0000 |
202 | @@ -0,0 +1,101 @@ |
203 | +/* |
204 | + * Copyright 2016 Canonical Ltd. |
205 | + * |
206 | + * This program is free software: you can redistribute it and/or modify it |
207 | + * under the terms of the GNU General Public License version 3, as published |
208 | + * by the Free Software Foundation. |
209 | + * |
210 | + * This program is distributed in the hope that it will be useful, but |
211 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
212 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
213 | + * PURPOSE. See the GNU General Public License for more details. |
214 | + * |
215 | + * You should have received a copy of the GNU General Public License along |
216 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
217 | + * |
218 | + * Authors: |
219 | + * Renato Araujo Oliveira Filho <renato.filho@canonical.com> |
220 | + */ |
221 | + |
222 | +#include <algorithm> |
223 | + |
224 | +#include <datetime/alarm-queue-simple.h> |
225 | +#include <datetime/clock-mock.h> |
226 | +#include <datetime/engine-eds.h> |
227 | +#include <datetime/myself.h> |
228 | +#include <datetime/planner-range.h> |
229 | + |
230 | +#include <gtest/gtest.h> |
231 | + |
232 | +#include "glib-fixture.h" |
233 | +#include "print-to.h" |
234 | +#include "timezone-mock.h" |
235 | +#include "wakeup-timer-mock.h" |
236 | + |
237 | +using namespace unity::indicator::datetime; |
238 | +using VAlarmFixture = GlibFixture; |
239 | + |
240 | +/*** |
241 | +**** |
242 | +***/ |
243 | + |
244 | +TEST_F(VAlarmFixture, RepeatingEventsWithIndividualChange) |
245 | +{ |
246 | + // start the EDS engine |
247 | + auto engine = std::make_shared<EdsEngine>(std::make_shared<Myself>()); |
248 | + |
249 | + // we need a consistent timezone for the planner and our local DateTimes |
250 | + constexpr char const * zone_str {"America/Recife"}; |
251 | + auto tz = std::make_shared<MockTimezone>(zone_str); |
252 | + auto gtz = g_time_zone_new(zone_str); |
253 | + |
254 | + // make a planner that looks at the year of 2016 in EDS |
255 | + auto planner = std::make_shared<SimpleRangePlanner>(engine, tz); |
256 | + const DateTime range_begin {gtz, 2016,1, 1, 0, 0, 0.0}; |
257 | + const DateTime range_end {gtz, 2016,12,31,23,59,59.5}; |
258 | + planner->range().set(std::make_pair(range_begin, range_end)); |
259 | + |
260 | + // give EDS a moment to load |
261 | + if (planner->appointments().get().empty()) { |
262 | + g_message("waiting a moment for EDS to load..."); |
263 | + auto on_appointments_changed = [this](const std::vector<Appointment>& appointments){ |
264 | + g_message("ah, they loaded"); |
265 | + if (!appointments.empty()) |
266 | + g_main_loop_quit(loop); |
267 | + }; |
268 | + core::ScopedConnection conn(planner->appointments().changed().connect(on_appointments_changed)); |
269 | + constexpr int max_wait_sec = 10; |
270 | + wait_msec(max_wait_sec * G_TIME_SPAN_MILLISECOND); |
271 | + } |
272 | + |
273 | + // what we expect to get... |
274 | + Appointment expected_appt; |
275 | + expected_appt.summary = "Alarm"; |
276 | + std::array<DateTime,10> expected_times = { |
277 | + DateTime(gtz,2016,6, 20,10,00,0), |
278 | + DateTime(gtz,2016,6, 21,10,00,0), |
279 | + DateTime(gtz,2016,6, 22,10,00,0), |
280 | + DateTime(gtz,2016,6, 23,10,00,0), |
281 | + DateTime(gtz,2016,6, 24,20,00,0), |
282 | + DateTime(gtz,2016,6, 25,10,00,0), |
283 | + DateTime(gtz,2016,6, 26,10,00,0), |
284 | + DateTime(gtz,2016,6, 27,10,00,0), |
285 | + DateTime(gtz,2016,6, 28,10,00,0), |
286 | + DateTime(gtz,2016,6, 29,10,00,0) |
287 | + }; |
288 | + |
289 | + // compare it to what we actually loaded... |
290 | + const auto appts = planner->appointments().get(); |
291 | + EXPECT_EQ(expected_times.size(), appts.size()); |
292 | + for (size_t i=0, n=expected_times.size(); i<n; i++) { |
293 | + const auto& appt = appts[i]; |
294 | + if (i != 4) |
295 | + EXPECT_EQ("Every day and every night", appt.summary); |
296 | + else |
297 | + EXPECT_EQ("At night", appt.summary); |
298 | + EXPECT_EQ(expected_times[i], appt.begin); |
299 | + } |
300 | + |
301 | + // cleanup |
302 | + g_time_zone_unref(gtz); |
303 | +} |
304 | |
305 | === added file 'tests/test-eds-ics-repeating-events-with-individual-change.ics.in' |
306 | --- tests/test-eds-ics-repeating-events-with-individual-change.ics.in 1970-01-01 00:00:00 +0000 |
307 | +++ tests/test-eds-ics-repeating-events-with-individual-change.ics.in 2016-06-28 15:52:52 +0000 |
308 | @@ -0,0 +1,969 @@ |
309 | +BEGIN:VCALENDAR |
310 | +CALSCALE:GREGORIAN |
311 | +PRODID:-//Ximian//NONSGML Evolution Calendar//EN |
312 | +VERSION:2.0 |
313 | +X-EVOLUTION-DATA-REVISION:2016-06-21T21:42:08.507434Z(7) |
314 | +BEGIN:VTIMEZONE |
315 | +TZID:/freeassociation.sourceforge.net/Tzfile/America/Recife |
316 | +X-LIC-LOCATION:America/Recife |
317 | +BEGIN:STANDARD |
318 | +TZNAME:BRT |
319 | +DTSTART:19680301T000000 |
320 | +TZOFFSETFROM:-0200 |
321 | +TZOFFSETTO:-0300 |
322 | +END:STANDARD |
323 | +BEGIN:DAYLIGHT |
324 | +TZNAME:BRST |
325 | +DTSTART:19851102T000000 |
326 | +TZOFFSETFROM:-0300 |
327 | +TZOFFSETTO:-0200 |
328 | +END:DAYLIGHT |
329 | +BEGIN:STANDARD |
330 | +TZNAME:BRT |
331 | +DTSTART:19860315T000000 |
332 | +TZOFFSETFROM:-0200 |
333 | +TZOFFSETTO:-0300 |
334 | +END:STANDARD |
335 | +BEGIN:DAYLIGHT |
336 | +TZNAME:BRST |
337 | +DTSTART:19861025T000000 |
338 | +TZOFFSETFROM:-0300 |
339 | +TZOFFSETTO:-0200 |
340 | +END:DAYLIGHT |
341 | +BEGIN:STANDARD |
342 | +TZNAME:BRT |
343 | +DTSTART:19870214T000000 |
344 | +TZOFFSETFROM:-0200 |
345 | +TZOFFSETTO:-0300 |
346 | +END:STANDARD |
347 | +BEGIN:DAYLIGHT |
348 | +TZNAME:BRST |
349 | +DTSTART:19871025T000000 |
350 | +TZOFFSETFROM:-0300 |
351 | +TZOFFSETTO:-0200 |
352 | +END:DAYLIGHT |
353 | +BEGIN:STANDARD |
354 | +TZNAME:BRT |
355 | +DTSTART:19880207T000000 |
356 | +TZOFFSETFROM:-0200 |
357 | +TZOFFSETTO:-0300 |
358 | +END:STANDARD |
359 | +BEGIN:DAYLIGHT |
360 | +TZNAME:BRST |
361 | +DTSTART:19881016T000000 |
362 | +TZOFFSETFROM:-0300 |
363 | +TZOFFSETTO:-0200 |
364 | +END:DAYLIGHT |
365 | +BEGIN:STANDARD |
366 | +TZNAME:BRT |
367 | +DTSTART:19890129T000000 |
368 | +TZOFFSETFROM:-0200 |
369 | +TZOFFSETTO:-0300 |
370 | +END:STANDARD |
371 | +BEGIN:DAYLIGHT |
372 | +TZNAME:BRST |
373 | +DTSTART:19891015T000000 |
374 | +TZOFFSETFROM:-0300 |
375 | +TZOFFSETTO:-0200 |
376 | +END:DAYLIGHT |
377 | +BEGIN:STANDARD |
378 | +TZNAME:BRT |
379 | +DTSTART:19900211T000000 |
380 | +TZOFFSETFROM:-0200 |
381 | +TZOFFSETTO:-0300 |
382 | +END:STANDARD |
383 | +BEGIN:DAYLIGHT |
384 | +TZNAME:BRST |
385 | +DTSTART:19991003T000000 |
386 | +TZOFFSETFROM:-0300 |
387 | +TZOFFSETTO:-0200 |
388 | +END:DAYLIGHT |
389 | +BEGIN:STANDARD |
390 | +TZNAME:BRT |
391 | +DTSTART:20000227T000000 |
392 | +TZOFFSETFROM:-0200 |
393 | +TZOFFSETTO:-0300 |
394 | +END:STANDARD |
395 | +BEGIN:DAYLIGHT |
396 | +TZNAME:BRST |
397 | +DTSTART:20001008T000000 |
398 | +TZOFFSETFROM:-0300 |
399 | +TZOFFSETTO:-0200 |
400 | +END:DAYLIGHT |
401 | +BEGIN:STANDARD |
402 | +TZNAME:BRT |
403 | +DTSTART:20001015T000000 |
404 | +TZOFFSETFROM:-0200 |
405 | +TZOFFSETTO:-0300 |
406 | +END:STANDARD |
407 | +BEGIN:DAYLIGHT |
408 | +TZNAME:BRST |
409 | +DTSTART:20011014T000000 |
410 | +TZOFFSETFROM:-0300 |
411 | +TZOFFSETTO:-0200 |
412 | +END:DAYLIGHT |
413 | +BEGIN:STANDARD |
414 | +TZNAME:BRT |
415 | +DTSTART:20020217T000000 |
416 | +TZOFFSETFROM:-0200 |
417 | +TZOFFSETTO:-0300 |
418 | +END:STANDARD |
419 | +END:VTIMEZONE |
420 | +BEGIN:VTIMEZONE |
421 | +TZID:/freeassociation.sourceforge.net/Tzfile/America/New_York |
422 | +X-LIC-LOCATION:America/New_York |
423 | +BEGIN:STANDARD |
424 | +TZNAME:EST |
425 | +DTSTART:19691026T020000 |
426 | +TZOFFSETFROM:-0400 |
427 | +TZOFFSETTO:-0500 |
428 | +END:STANDARD |
429 | +BEGIN:DAYLIGHT |
430 | +TZNAME:EDT |
431 | +DTSTART:19700426T020000 |
432 | +TZOFFSETFROM:-0500 |
433 | +TZOFFSETTO:-0400 |
434 | +END:DAYLIGHT |
435 | +BEGIN:STANDARD |
436 | +TZNAME:EST |
437 | +DTSTART:19701025T020000 |
438 | +TZOFFSETFROM:-0400 |
439 | +TZOFFSETTO:-0500 |
440 | +END:STANDARD |
441 | +BEGIN:DAYLIGHT |
442 | +TZNAME:EDT |
443 | +DTSTART:19710425T020000 |
444 | +TZOFFSETFROM:-0500 |
445 | +TZOFFSETTO:-0400 |
446 | +END:DAYLIGHT |
447 | +BEGIN:STANDARD |
448 | +TZNAME:EST |
449 | +DTSTART:19711031T020000 |
450 | +TZOFFSETFROM:-0400 |
451 | +TZOFFSETTO:-0500 |
452 | +END:STANDARD |
453 | +BEGIN:DAYLIGHT |
454 | +TZNAME:EDT |
455 | +DTSTART:19720430T020000 |
456 | +TZOFFSETFROM:-0500 |
457 | +TZOFFSETTO:-0400 |
458 | +END:DAYLIGHT |
459 | +BEGIN:STANDARD |
460 | +TZNAME:EST |
461 | +DTSTART:19721029T020000 |
462 | +TZOFFSETFROM:-0400 |
463 | +TZOFFSETTO:-0500 |
464 | +END:STANDARD |
465 | +BEGIN:DAYLIGHT |
466 | +TZNAME:EDT |
467 | +DTSTART:19730429T020000 |
468 | +TZOFFSETFROM:-0500 |
469 | +TZOFFSETTO:-0400 |
470 | +END:DAYLIGHT |
471 | +BEGIN:STANDARD |
472 | +TZNAME:EST |
473 | +DTSTART:19731028T020000 |
474 | +TZOFFSETFROM:-0400 |
475 | +TZOFFSETTO:-0500 |
476 | +END:STANDARD |
477 | +BEGIN:DAYLIGHT |
478 | +TZNAME:EDT |
479 | +DTSTART:19740106T020000 |
480 | +TZOFFSETFROM:-0500 |
481 | +TZOFFSETTO:-0400 |
482 | +END:DAYLIGHT |
483 | +BEGIN:STANDARD |
484 | +TZNAME:EST |
485 | +DTSTART:19741027T020000 |
486 | +TZOFFSETFROM:-0400 |
487 | +TZOFFSETTO:-0500 |
488 | +END:STANDARD |
489 | +BEGIN:DAYLIGHT |
490 | +TZNAME:EDT |
491 | +DTSTART:19750223T020000 |
492 | +TZOFFSETFROM:-0500 |
493 | +TZOFFSETTO:-0400 |
494 | +END:DAYLIGHT |
495 | +BEGIN:STANDARD |
496 | +TZNAME:EST |
497 | +DTSTART:19751026T020000 |
498 | +TZOFFSETFROM:-0400 |
499 | +TZOFFSETTO:-0500 |
500 | +END:STANDARD |
501 | +BEGIN:DAYLIGHT |
502 | +TZNAME:EDT |
503 | +DTSTART:19760425T020000 |
504 | +TZOFFSETFROM:-0500 |
505 | +TZOFFSETTO:-0400 |
506 | +END:DAYLIGHT |
507 | +BEGIN:STANDARD |
508 | +TZNAME:EST |
509 | +DTSTART:19761031T020000 |
510 | +TZOFFSETFROM:-0400 |
511 | +TZOFFSETTO:-0500 |
512 | +END:STANDARD |
513 | +BEGIN:DAYLIGHT |
514 | +TZNAME:EDT |
515 | +DTSTART:19770424T020000 |
516 | +TZOFFSETFROM:-0500 |
517 | +TZOFFSETTO:-0400 |
518 | +END:DAYLIGHT |
519 | +BEGIN:STANDARD |
520 | +TZNAME:EST |
521 | +DTSTART:19771030T020000 |
522 | +TZOFFSETFROM:-0400 |
523 | +TZOFFSETTO:-0500 |
524 | +END:STANDARD |
525 | +BEGIN:DAYLIGHT |
526 | +TZNAME:EDT |
527 | +DTSTART:19780430T020000 |
528 | +TZOFFSETFROM:-0500 |
529 | +TZOFFSETTO:-0400 |
530 | +END:DAYLIGHT |
531 | +BEGIN:STANDARD |
532 | +TZNAME:EST |
533 | +DTSTART:19781029T020000 |
534 | +TZOFFSETFROM:-0400 |
535 | +TZOFFSETTO:-0500 |
536 | +END:STANDARD |
537 | +BEGIN:DAYLIGHT |
538 | +TZNAME:EDT |
539 | +DTSTART:19790429T020000 |
540 | +TZOFFSETFROM:-0500 |
541 | +TZOFFSETTO:-0400 |
542 | +END:DAYLIGHT |
543 | +BEGIN:STANDARD |
544 | +TZNAME:EST |
545 | +DTSTART:19791028T020000 |
546 | +TZOFFSETFROM:-0400 |
547 | +TZOFFSETTO:-0500 |
548 | +END:STANDARD |
549 | +BEGIN:DAYLIGHT |
550 | +TZNAME:EDT |
551 | +DTSTART:19800427T020000 |
552 | +TZOFFSETFROM:-0500 |
553 | +TZOFFSETTO:-0400 |
554 | +END:DAYLIGHT |
555 | +BEGIN:STANDARD |
556 | +TZNAME:EST |
557 | +DTSTART:19801026T020000 |
558 | +TZOFFSETFROM:-0400 |
559 | +TZOFFSETTO:-0500 |
560 | +END:STANDARD |
561 | +BEGIN:DAYLIGHT |
562 | +TZNAME:EDT |
563 | +DTSTART:19810426T020000 |
564 | +TZOFFSETFROM:-0500 |
565 | +TZOFFSETTO:-0400 |
566 | +END:DAYLIGHT |
567 | +BEGIN:STANDARD |
568 | +TZNAME:EST |
569 | +DTSTART:19811025T020000 |
570 | +TZOFFSETFROM:-0400 |
571 | +TZOFFSETTO:-0500 |
572 | +END:STANDARD |
573 | +BEGIN:DAYLIGHT |
574 | +TZNAME:EDT |
575 | +DTSTART:19820425T020000 |
576 | +TZOFFSETFROM:-0500 |
577 | +TZOFFSETTO:-0400 |
578 | +END:DAYLIGHT |
579 | +BEGIN:STANDARD |
580 | +TZNAME:EST |
581 | +DTSTART:19821031T020000 |
582 | +TZOFFSETFROM:-0400 |
583 | +TZOFFSETTO:-0500 |
584 | +END:STANDARD |
585 | +BEGIN:DAYLIGHT |
586 | +TZNAME:EDT |
587 | +DTSTART:19830424T020000 |
588 | +TZOFFSETFROM:-0500 |
589 | +TZOFFSETTO:-0400 |
590 | +END:DAYLIGHT |
591 | +BEGIN:STANDARD |
592 | +TZNAME:EST |
593 | +DTSTART:19831030T020000 |
594 | +TZOFFSETFROM:-0400 |
595 | +TZOFFSETTO:-0500 |
596 | +END:STANDARD |
597 | +BEGIN:DAYLIGHT |
598 | +TZNAME:EDT |
599 | +DTSTART:19840429T020000 |
600 | +TZOFFSETFROM:-0500 |
601 | +TZOFFSETTO:-0400 |
602 | +END:DAYLIGHT |
603 | +BEGIN:STANDARD |
604 | +TZNAME:EST |
605 | +DTSTART:19841028T020000 |
606 | +TZOFFSETFROM:-0400 |
607 | +TZOFFSETTO:-0500 |
608 | +END:STANDARD |
609 | +BEGIN:DAYLIGHT |
610 | +TZNAME:EDT |
611 | +DTSTART:19850428T020000 |
612 | +TZOFFSETFROM:-0500 |
613 | +TZOFFSETTO:-0400 |
614 | +END:DAYLIGHT |
615 | +BEGIN:STANDARD |
616 | +TZNAME:EST |
617 | +DTSTART:19851027T020000 |
618 | +TZOFFSETFROM:-0400 |
619 | +TZOFFSETTO:-0500 |
620 | +END:STANDARD |
621 | +BEGIN:DAYLIGHT |
622 | +TZNAME:EDT |
623 | +DTSTART:19860427T020000 |
624 | +TZOFFSETFROM:-0500 |
625 | +TZOFFSETTO:-0400 |
626 | +END:DAYLIGHT |
627 | +BEGIN:STANDARD |
628 | +TZNAME:EST |
629 | +DTSTART:19861026T020000 |
630 | +TZOFFSETFROM:-0400 |
631 | +TZOFFSETTO:-0500 |
632 | +END:STANDARD |
633 | +BEGIN:DAYLIGHT |
634 | +TZNAME:EDT |
635 | +DTSTART:19870405T020000 |
636 | +TZOFFSETFROM:-0500 |
637 | +TZOFFSETTO:-0400 |
638 | +END:DAYLIGHT |
639 | +BEGIN:STANDARD |
640 | +TZNAME:EST |
641 | +DTSTART:19871025T020000 |
642 | +TZOFFSETFROM:-0400 |
643 | +TZOFFSETTO:-0500 |
644 | +END:STANDARD |
645 | +BEGIN:DAYLIGHT |
646 | +TZNAME:EDT |
647 | +DTSTART:19880403T020000 |
648 | +TZOFFSETFROM:-0500 |
649 | +TZOFFSETTO:-0400 |
650 | +END:DAYLIGHT |
651 | +BEGIN:STANDARD |
652 | +TZNAME:EST |
653 | +DTSTART:19881030T020000 |
654 | +TZOFFSETFROM:-0400 |
655 | +TZOFFSETTO:-0500 |
656 | +END:STANDARD |
657 | +BEGIN:DAYLIGHT |
658 | +TZNAME:EDT |
659 | +DTSTART:19890402T020000 |
660 | +TZOFFSETFROM:-0500 |
661 | +TZOFFSETTO:-0400 |
662 | +END:DAYLIGHT |
663 | +BEGIN:STANDARD |
664 | +TZNAME:EST |
665 | +DTSTART:19891029T020000 |
666 | +TZOFFSETFROM:-0400 |
667 | +TZOFFSETTO:-0500 |
668 | +END:STANDARD |
669 | +BEGIN:DAYLIGHT |
670 | +TZNAME:EDT |
671 | +DTSTART:19900401T020000 |
672 | +TZOFFSETFROM:-0500 |
673 | +TZOFFSETTO:-0400 |
674 | +END:DAYLIGHT |
675 | +BEGIN:STANDARD |
676 | +TZNAME:EST |
677 | +DTSTART:19901028T020000 |
678 | +TZOFFSETFROM:-0400 |
679 | +TZOFFSETTO:-0500 |
680 | +END:STANDARD |
681 | +BEGIN:DAYLIGHT |
682 | +TZNAME:EDT |
683 | +DTSTART:19910407T020000 |
684 | +TZOFFSETFROM:-0500 |
685 | +TZOFFSETTO:-0400 |
686 | +END:DAYLIGHT |
687 | +BEGIN:STANDARD |
688 | +TZNAME:EST |
689 | +DTSTART:19911027T020000 |
690 | +TZOFFSETFROM:-0400 |
691 | +TZOFFSETTO:-0500 |
692 | +END:STANDARD |
693 | +BEGIN:DAYLIGHT |
694 | +TZNAME:EDT |
695 | +DTSTART:19920405T020000 |
696 | +TZOFFSETFROM:-0500 |
697 | +TZOFFSETTO:-0400 |
698 | +END:DAYLIGHT |
699 | +BEGIN:STANDARD |
700 | +TZNAME:EST |
701 | +DTSTART:19921025T020000 |
702 | +TZOFFSETFROM:-0400 |
703 | +TZOFFSETTO:-0500 |
704 | +END:STANDARD |
705 | +BEGIN:DAYLIGHT |
706 | +TZNAME:EDT |
707 | +DTSTART:19930404T020000 |
708 | +TZOFFSETFROM:-0500 |
709 | +TZOFFSETTO:-0400 |
710 | +END:DAYLIGHT |
711 | +BEGIN:STANDARD |
712 | +TZNAME:EST |
713 | +DTSTART:19931031T020000 |
714 | +TZOFFSETFROM:-0400 |
715 | +TZOFFSETTO:-0500 |
716 | +END:STANDARD |
717 | +BEGIN:DAYLIGHT |
718 | +TZNAME:EDT |
719 | +DTSTART:19940403T020000 |
720 | +TZOFFSETFROM:-0500 |
721 | +TZOFFSETTO:-0400 |
722 | +END:DAYLIGHT |
723 | +BEGIN:STANDARD |
724 | +TZNAME:EST |
725 | +DTSTART:19941030T020000 |
726 | +TZOFFSETFROM:-0400 |
727 | +TZOFFSETTO:-0500 |
728 | +END:STANDARD |
729 | +BEGIN:DAYLIGHT |
730 | +TZNAME:EDT |
731 | +DTSTART:19950402T020000 |
732 | +TZOFFSETFROM:-0500 |
733 | +TZOFFSETTO:-0400 |
734 | +END:DAYLIGHT |
735 | +BEGIN:STANDARD |
736 | +TZNAME:EST |
737 | +DTSTART:19951029T020000 |
738 | +TZOFFSETFROM:-0400 |
739 | +TZOFFSETTO:-0500 |
740 | +END:STANDARD |
741 | +BEGIN:DAYLIGHT |
742 | +TZNAME:EDT |
743 | +DTSTART:19960407T020000 |
744 | +TZOFFSETFROM:-0500 |
745 | +TZOFFSETTO:-0400 |
746 | +END:DAYLIGHT |
747 | +BEGIN:STANDARD |
748 | +TZNAME:EST |
749 | +DTSTART:19961027T020000 |
750 | +TZOFFSETFROM:-0400 |
751 | +TZOFFSETTO:-0500 |
752 | +END:STANDARD |
753 | +BEGIN:DAYLIGHT |
754 | +TZNAME:EDT |
755 | +DTSTART:19970406T020000 |
756 | +TZOFFSETFROM:-0500 |
757 | +TZOFFSETTO:-0400 |
758 | +END:DAYLIGHT |
759 | +BEGIN:STANDARD |
760 | +TZNAME:EST |
761 | +DTSTART:19971026T020000 |
762 | +TZOFFSETFROM:-0400 |
763 | +TZOFFSETTO:-0500 |
764 | +END:STANDARD |
765 | +BEGIN:DAYLIGHT |
766 | +TZNAME:EDT |
767 | +DTSTART:19980405T020000 |
768 | +TZOFFSETFROM:-0500 |
769 | +TZOFFSETTO:-0400 |
770 | +END:DAYLIGHT |
771 | +BEGIN:STANDARD |
772 | +TZNAME:EST |
773 | +DTSTART:19981025T020000 |
774 | +TZOFFSETFROM:-0400 |
775 | +TZOFFSETTO:-0500 |
776 | +END:STANDARD |
777 | +BEGIN:DAYLIGHT |
778 | +TZNAME:EDT |
779 | +DTSTART:19990404T020000 |
780 | +TZOFFSETFROM:-0500 |
781 | +TZOFFSETTO:-0400 |
782 | +END:DAYLIGHT |
783 | +BEGIN:STANDARD |
784 | +TZNAME:EST |
785 | +DTSTART:19991031T020000 |
786 | +TZOFFSETFROM:-0400 |
787 | +TZOFFSETTO:-0500 |
788 | +END:STANDARD |
789 | +BEGIN:DAYLIGHT |
790 | +TZNAME:EDT |
791 | +DTSTART:20000402T020000 |
792 | +TZOFFSETFROM:-0500 |
793 | +TZOFFSETTO:-0400 |
794 | +END:DAYLIGHT |
795 | +BEGIN:STANDARD |
796 | +TZNAME:EST |
797 | +DTSTART:20001029T020000 |
798 | +TZOFFSETFROM:-0400 |
799 | +TZOFFSETTO:-0500 |
800 | +END:STANDARD |
801 | +BEGIN:DAYLIGHT |
802 | +TZNAME:EDT |
803 | +DTSTART:20010401T020000 |
804 | +TZOFFSETFROM:-0500 |
805 | +TZOFFSETTO:-0400 |
806 | +END:DAYLIGHT |
807 | +BEGIN:STANDARD |
808 | +TZNAME:EST |
809 | +DTSTART:20011028T020000 |
810 | +TZOFFSETFROM:-0400 |
811 | +TZOFFSETTO:-0500 |
812 | +END:STANDARD |
813 | +BEGIN:DAYLIGHT |
814 | +TZNAME:EDT |
815 | +DTSTART:20020407T020000 |
816 | +TZOFFSETFROM:-0500 |
817 | +TZOFFSETTO:-0400 |
818 | +END:DAYLIGHT |
819 | +BEGIN:STANDARD |
820 | +TZNAME:EST |
821 | +DTSTART:20021027T020000 |
822 | +TZOFFSETFROM:-0400 |
823 | +TZOFFSETTO:-0500 |
824 | +END:STANDARD |
825 | +BEGIN:DAYLIGHT |
826 | +TZNAME:EDT |
827 | +DTSTART:20030406T020000 |
828 | +TZOFFSETFROM:-0500 |
829 | +TZOFFSETTO:-0400 |
830 | +END:DAYLIGHT |
831 | +BEGIN:STANDARD |
832 | +TZNAME:EST |
833 | +DTSTART:20031026T020000 |
834 | +TZOFFSETFROM:-0400 |
835 | +TZOFFSETTO:-0500 |
836 | +END:STANDARD |
837 | +BEGIN:DAYLIGHT |
838 | +TZNAME:EDT |
839 | +DTSTART:20040404T020000 |
840 | +TZOFFSETFROM:-0500 |
841 | +TZOFFSETTO:-0400 |
842 | +END:DAYLIGHT |
843 | +BEGIN:STANDARD |
844 | +TZNAME:EST |
845 | +DTSTART:20041031T020000 |
846 | +TZOFFSETFROM:-0400 |
847 | +TZOFFSETTO:-0500 |
848 | +END:STANDARD |
849 | +BEGIN:DAYLIGHT |
850 | +TZNAME:EDT |
851 | +DTSTART:20050403T020000 |
852 | +TZOFFSETFROM:-0500 |
853 | +TZOFFSETTO:-0400 |
854 | +END:DAYLIGHT |
855 | +BEGIN:STANDARD |
856 | +TZNAME:EST |
857 | +DTSTART:20051030T020000 |
858 | +TZOFFSETFROM:-0400 |
859 | +TZOFFSETTO:-0500 |
860 | +END:STANDARD |
861 | +BEGIN:DAYLIGHT |
862 | +TZNAME:EDT |
863 | +DTSTART:20060402T020000 |
864 | +TZOFFSETFROM:-0500 |
865 | +TZOFFSETTO:-0400 |
866 | +END:DAYLIGHT |
867 | +BEGIN:STANDARD |
868 | +TZNAME:EST |
869 | +DTSTART:20061029T020000 |
870 | +TZOFFSETFROM:-0400 |
871 | +TZOFFSETTO:-0500 |
872 | +END:STANDARD |
873 | +BEGIN:DAYLIGHT |
874 | +TZNAME:EDT |
875 | +DTSTART:20070311T020000 |
876 | +TZOFFSETFROM:-0500 |
877 | +TZOFFSETTO:-0400 |
878 | +END:DAYLIGHT |
879 | +BEGIN:STANDARD |
880 | +TZNAME:EST |
881 | +DTSTART:20071104T020000 |
882 | +TZOFFSETFROM:-0400 |
883 | +TZOFFSETTO:-0500 |
884 | +END:STANDARD |
885 | +BEGIN:DAYLIGHT |
886 | +TZNAME:EDT |
887 | +DTSTART:20080309T020000 |
888 | +TZOFFSETFROM:-0500 |
889 | +TZOFFSETTO:-0400 |
890 | +END:DAYLIGHT |
891 | +BEGIN:STANDARD |
892 | +TZNAME:EST |
893 | +DTSTART:20081102T020000 |
894 | +TZOFFSETFROM:-0400 |
895 | +TZOFFSETTO:-0500 |
896 | +END:STANDARD |
897 | +BEGIN:DAYLIGHT |
898 | +TZNAME:EDT |
899 | +DTSTART:20090308T020000 |
900 | +TZOFFSETFROM:-0500 |
901 | +TZOFFSETTO:-0400 |
902 | +END:DAYLIGHT |
903 | +BEGIN:STANDARD |
904 | +TZNAME:EST |
905 | +DTSTART:20091101T020000 |
906 | +TZOFFSETFROM:-0400 |
907 | +TZOFFSETTO:-0500 |
908 | +END:STANDARD |
909 | +BEGIN:DAYLIGHT |
910 | +TZNAME:EDT |
911 | +DTSTART:20100314T020000 |
912 | +TZOFFSETFROM:-0500 |
913 | +TZOFFSETTO:-0400 |
914 | +END:DAYLIGHT |
915 | +BEGIN:STANDARD |
916 | +TZNAME:EST |
917 | +DTSTART:20101107T020000 |
918 | +TZOFFSETFROM:-0400 |
919 | +TZOFFSETTO:-0500 |
920 | +END:STANDARD |
921 | +BEGIN:DAYLIGHT |
922 | +TZNAME:EDT |
923 | +DTSTART:20110313T020000 |
924 | +TZOFFSETFROM:-0500 |
925 | +TZOFFSETTO:-0400 |
926 | +END:DAYLIGHT |
927 | +BEGIN:STANDARD |
928 | +TZNAME:EST |
929 | +DTSTART:20111106T020000 |
930 | +TZOFFSETFROM:-0400 |
931 | +TZOFFSETTO:-0500 |
932 | +END:STANDARD |
933 | +BEGIN:DAYLIGHT |
934 | +TZNAME:EDT |
935 | +DTSTART:20120311T020000 |
936 | +TZOFFSETFROM:-0500 |
937 | +TZOFFSETTO:-0400 |
938 | +END:DAYLIGHT |
939 | +BEGIN:STANDARD |
940 | +TZNAME:EST |
941 | +DTSTART:20121104T020000 |
942 | +TZOFFSETFROM:-0400 |
943 | +TZOFFSETTO:-0500 |
944 | +END:STANDARD |
945 | +BEGIN:DAYLIGHT |
946 | +TZNAME:EDT |
947 | +DTSTART:20130310T020000 |
948 | +TZOFFSETFROM:-0500 |
949 | +TZOFFSETTO:-0400 |
950 | +END:DAYLIGHT |
951 | +BEGIN:STANDARD |
952 | +TZNAME:EST |
953 | +DTSTART:20131103T020000 |
954 | +TZOFFSETFROM:-0400 |
955 | +TZOFFSETTO:-0500 |
956 | +END:STANDARD |
957 | +BEGIN:DAYLIGHT |
958 | +TZNAME:EDT |
959 | +DTSTART:20140309T020000 |
960 | +TZOFFSETFROM:-0500 |
961 | +TZOFFSETTO:-0400 |
962 | +END:DAYLIGHT |
963 | +BEGIN:STANDARD |
964 | +TZNAME:EST |
965 | +DTSTART:20141102T020000 |
966 | +TZOFFSETFROM:-0400 |
967 | +TZOFFSETTO:-0500 |
968 | +END:STANDARD |
969 | +BEGIN:DAYLIGHT |
970 | +TZNAME:EDT |
971 | +DTSTART:20150308T020000 |
972 | +TZOFFSETFROM:-0500 |
973 | +TZOFFSETTO:-0400 |
974 | +END:DAYLIGHT |
975 | +BEGIN:STANDARD |
976 | +TZNAME:EST |
977 | +DTSTART:20151101T020000 |
978 | +TZOFFSETFROM:-0400 |
979 | +TZOFFSETTO:-0500 |
980 | +END:STANDARD |
981 | +BEGIN:DAYLIGHT |
982 | +TZNAME:EDT |
983 | +DTSTART:20160313T020000 |
984 | +TZOFFSETFROM:-0500 |
985 | +TZOFFSETTO:-0400 |
986 | +END:DAYLIGHT |
987 | +BEGIN:STANDARD |
988 | +TZNAME:EST |
989 | +DTSTART:20161106T020000 |
990 | +TZOFFSETFROM:-0400 |
991 | +TZOFFSETTO:-0500 |
992 | +END:STANDARD |
993 | +BEGIN:DAYLIGHT |
994 | +TZNAME:EDT |
995 | +DTSTART:20170312T020000 |
996 | +TZOFFSETFROM:-0500 |
997 | +TZOFFSETTO:-0400 |
998 | +END:DAYLIGHT |
999 | +BEGIN:STANDARD |
1000 | +TZNAME:EST |
1001 | +DTSTART:20171105T020000 |
1002 | +TZOFFSETFROM:-0400 |
1003 | +TZOFFSETTO:-0500 |
1004 | +END:STANDARD |
1005 | +BEGIN:DAYLIGHT |
1006 | +TZNAME:EDT |
1007 | +DTSTART:20180311T020000 |
1008 | +TZOFFSETFROM:-0500 |
1009 | +TZOFFSETTO:-0400 |
1010 | +END:DAYLIGHT |
1011 | +BEGIN:STANDARD |
1012 | +TZNAME:EST |
1013 | +DTSTART:20181104T020000 |
1014 | +TZOFFSETFROM:-0400 |
1015 | +TZOFFSETTO:-0500 |
1016 | +END:STANDARD |
1017 | +BEGIN:DAYLIGHT |
1018 | +TZNAME:EDT |
1019 | +DTSTART:20190310T020000 |
1020 | +TZOFFSETFROM:-0500 |
1021 | +TZOFFSETTO:-0400 |
1022 | +END:DAYLIGHT |
1023 | +BEGIN:STANDARD |
1024 | +TZNAME:EST |
1025 | +DTSTART:20191103T020000 |
1026 | +TZOFFSETFROM:-0400 |
1027 | +TZOFFSETTO:-0500 |
1028 | +END:STANDARD |
1029 | +BEGIN:DAYLIGHT |
1030 | +TZNAME:EDT |
1031 | +DTSTART:20200308T020000 |
1032 | +TZOFFSETFROM:-0500 |
1033 | +TZOFFSETTO:-0400 |
1034 | +END:DAYLIGHT |
1035 | +BEGIN:STANDARD |
1036 | +TZNAME:EST |
1037 | +DTSTART:20201101T020000 |
1038 | +TZOFFSETFROM:-0400 |
1039 | +TZOFFSETTO:-0500 |
1040 | +END:STANDARD |
1041 | +BEGIN:DAYLIGHT |
1042 | +TZNAME:EDT |
1043 | +DTSTART:20210314T020000 |
1044 | +TZOFFSETFROM:-0500 |
1045 | +TZOFFSETTO:-0400 |
1046 | +END:DAYLIGHT |
1047 | +BEGIN:STANDARD |
1048 | +TZNAME:EST |
1049 | +DTSTART:20211107T020000 |
1050 | +TZOFFSETFROM:-0400 |
1051 | +TZOFFSETTO:-0500 |
1052 | +END:STANDARD |
1053 | +BEGIN:DAYLIGHT |
1054 | +TZNAME:EDT |
1055 | +DTSTART:20220313T020000 |
1056 | +TZOFFSETFROM:-0500 |
1057 | +TZOFFSETTO:-0400 |
1058 | +END:DAYLIGHT |
1059 | +BEGIN:STANDARD |
1060 | +TZNAME:EST |
1061 | +DTSTART:20221106T020000 |
1062 | +TZOFFSETFROM:-0400 |
1063 | +TZOFFSETTO:-0500 |
1064 | +END:STANDARD |
1065 | +BEGIN:DAYLIGHT |
1066 | +TZNAME:EDT |
1067 | +DTSTART:20230312T020000 |
1068 | +TZOFFSETFROM:-0500 |
1069 | +TZOFFSETTO:-0400 |
1070 | +END:DAYLIGHT |
1071 | +BEGIN:STANDARD |
1072 | +TZNAME:EST |
1073 | +DTSTART:20231105T020000 |
1074 | +TZOFFSETFROM:-0400 |
1075 | +TZOFFSETTO:-0500 |
1076 | +END:STANDARD |
1077 | +BEGIN:DAYLIGHT |
1078 | +TZNAME:EDT |
1079 | +DTSTART:20240310T020000 |
1080 | +TZOFFSETFROM:-0500 |
1081 | +TZOFFSETTO:-0400 |
1082 | +END:DAYLIGHT |
1083 | +BEGIN:STANDARD |
1084 | +TZNAME:EST |
1085 | +DTSTART:20241103T020000 |
1086 | +TZOFFSETFROM:-0400 |
1087 | +TZOFFSETTO:-0500 |
1088 | +END:STANDARD |
1089 | +BEGIN:DAYLIGHT |
1090 | +TZNAME:EDT |
1091 | +DTSTART:20250309T020000 |
1092 | +TZOFFSETFROM:-0500 |
1093 | +TZOFFSETTO:-0400 |
1094 | +END:DAYLIGHT |
1095 | +BEGIN:STANDARD |
1096 | +TZNAME:EST |
1097 | +DTSTART:20251102T020000 |
1098 | +TZOFFSETFROM:-0400 |
1099 | +TZOFFSETTO:-0500 |
1100 | +END:STANDARD |
1101 | +BEGIN:DAYLIGHT |
1102 | +TZNAME:EDT |
1103 | +DTSTART:20260308T020000 |
1104 | +TZOFFSETFROM:-0500 |
1105 | +TZOFFSETTO:-0400 |
1106 | +END:DAYLIGHT |
1107 | +BEGIN:STANDARD |
1108 | +TZNAME:EST |
1109 | +DTSTART:20261101T020000 |
1110 | +TZOFFSETFROM:-0400 |
1111 | +TZOFFSETTO:-0500 |
1112 | +END:STANDARD |
1113 | +BEGIN:DAYLIGHT |
1114 | +TZNAME:EDT |
1115 | +DTSTART:20270314T020000 |
1116 | +TZOFFSETFROM:-0500 |
1117 | +TZOFFSETTO:-0400 |
1118 | +END:DAYLIGHT |
1119 | +BEGIN:STANDARD |
1120 | +TZNAME:EST |
1121 | +DTSTART:20271107T020000 |
1122 | +TZOFFSETFROM:-0400 |
1123 | +TZOFFSETTO:-0500 |
1124 | +END:STANDARD |
1125 | +BEGIN:DAYLIGHT |
1126 | +TZNAME:EDT |
1127 | +DTSTART:20280312T020000 |
1128 | +TZOFFSETFROM:-0500 |
1129 | +TZOFFSETTO:-0400 |
1130 | +END:DAYLIGHT |
1131 | +BEGIN:STANDARD |
1132 | +TZNAME:EST |
1133 | +DTSTART:20281105T020000 |
1134 | +TZOFFSETFROM:-0400 |
1135 | +TZOFFSETTO:-0500 |
1136 | +END:STANDARD |
1137 | +BEGIN:DAYLIGHT |
1138 | +TZNAME:EDT |
1139 | +DTSTART:20290311T020000 |
1140 | +TZOFFSETFROM:-0500 |
1141 | +TZOFFSETTO:-0400 |
1142 | +END:DAYLIGHT |
1143 | +BEGIN:STANDARD |
1144 | +TZNAME:EST |
1145 | +DTSTART:20291104T020000 |
1146 | +TZOFFSETFROM:-0400 |
1147 | +TZOFFSETTO:-0500 |
1148 | +END:STANDARD |
1149 | +BEGIN:DAYLIGHT |
1150 | +TZNAME:EDT |
1151 | +DTSTART:20300310T020000 |
1152 | +TZOFFSETFROM:-0500 |
1153 | +TZOFFSETTO:-0400 |
1154 | +END:DAYLIGHT |
1155 | +BEGIN:STANDARD |
1156 | +TZNAME:EST |
1157 | +DTSTART:20301103T020000 |
1158 | +TZOFFSETFROM:-0400 |
1159 | +TZOFFSETTO:-0500 |
1160 | +END:STANDARD |
1161 | +BEGIN:DAYLIGHT |
1162 | +TZNAME:EDT |
1163 | +DTSTART:20310309T020000 |
1164 | +TZOFFSETFROM:-0500 |
1165 | +TZOFFSETTO:-0400 |
1166 | +END:DAYLIGHT |
1167 | +BEGIN:STANDARD |
1168 | +TZNAME:EST |
1169 | +DTSTART:20311102T020000 |
1170 | +TZOFFSETFROM:-0400 |
1171 | +TZOFFSETTO:-0500 |
1172 | +END:STANDARD |
1173 | +BEGIN:DAYLIGHT |
1174 | +TZNAME:EDT |
1175 | +DTSTART:20320314T020000 |
1176 | +TZOFFSETFROM:-0500 |
1177 | +TZOFFSETTO:-0400 |
1178 | +END:DAYLIGHT |
1179 | +BEGIN:STANDARD |
1180 | +TZNAME:EST |
1181 | +DTSTART:20321107T020000 |
1182 | +TZOFFSETFROM:-0400 |
1183 | +TZOFFSETTO:-0500 |
1184 | +END:STANDARD |
1185 | +BEGIN:DAYLIGHT |
1186 | +TZNAME:EDT |
1187 | +DTSTART:20330313T020000 |
1188 | +TZOFFSETFROM:-0500 |
1189 | +TZOFFSETTO:-0400 |
1190 | +END:DAYLIGHT |
1191 | +BEGIN:STANDARD |
1192 | +TZNAME:EST |
1193 | +DTSTART:20331106T020000 |
1194 | +TZOFFSETFROM:-0400 |
1195 | +TZOFFSETTO:-0500 |
1196 | +END:STANDARD |
1197 | +BEGIN:DAYLIGHT |
1198 | +TZNAME:EDT |
1199 | +DTSTART:20340312T020000 |
1200 | +TZOFFSETFROM:-0500 |
1201 | +TZOFFSETTO:-0400 |
1202 | +END:DAYLIGHT |
1203 | +BEGIN:STANDARD |
1204 | +TZNAME:EST |
1205 | +DTSTART:20341105T020000 |
1206 | +TZOFFSETFROM:-0400 |
1207 | +TZOFFSETTO:-0500 |
1208 | +END:STANDARD |
1209 | +BEGIN:DAYLIGHT |
1210 | +TZNAME:EDT |
1211 | +DTSTART:20350311T020000 |
1212 | +TZOFFSETFROM:-0500 |
1213 | +TZOFFSETTO:-0400 |
1214 | +END:DAYLIGHT |
1215 | +BEGIN:STANDARD |
1216 | +TZNAME:EST |
1217 | +DTSTART:20351104T020000 |
1218 | +TZOFFSETFROM:-0400 |
1219 | +TZOFFSETTO:-0500 |
1220 | +END:STANDARD |
1221 | +BEGIN:DAYLIGHT |
1222 | +TZNAME:EDT |
1223 | +DTSTART:20360309T020000 |
1224 | +TZOFFSETFROM:-0500 |
1225 | +TZOFFSETTO:-0400 |
1226 | +END:DAYLIGHT |
1227 | +BEGIN:STANDARD |
1228 | +TZNAME:EST |
1229 | +DTSTART:20361102T020000 |
1230 | +TZOFFSETFROM:-0400 |
1231 | +TZOFFSETTO:-0500 |
1232 | +END:STANDARD |
1233 | +BEGIN:DAYLIGHT |
1234 | +TZNAME:EDT |
1235 | +DTSTART:20370308T020000 |
1236 | +TZOFFSETFROM:-0500 |
1237 | +TZOFFSETTO:-0400 |
1238 | +END:DAYLIGHT |
1239 | +BEGIN:STANDARD |
1240 | +TZNAME:EST |
1241 | +DTSTART:20371101T020000 |
1242 | +TZOFFSETFROM:-0400 |
1243 | +TZOFFSETTO:-0500 |
1244 | +END:STANDARD |
1245 | +END:VTIMEZONE |
1246 | +BEGIN:VEVENT |
1247 | +UID:20160621T214054Z-31488-1000-4151-27@rento-ubuntu |
1248 | +DTSTAMP:20160621T123718Z |
1249 | +DTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/America/Recife: |
1250 | + 20160620T100000 |
1251 | +DTEND;TZID=/freeassociation.sourceforge.net/Tzfile/America/Recife: |
1252 | + 20160620T103000 |
1253 | +TRANSP:OPAQUE |
1254 | +SEQUENCE:2 |
1255 | +SUMMARY:Every day and every night |
1256 | +CLASS:PUBLIC |
1257 | +RRULE;X-EVOLUTION-ENDDATE=20160629T130000Z:FREQ=DAILY;COUNT=10 |
1258 | +CREATED:20160621T214124Z |
1259 | +LAST-MODIFIED:20160621T214124Z |
1260 | +END:VEVENT |
1261 | +BEGIN:VEVENT |
1262 | +UID:20160621T214054Z-31488-1000-4151-27@rento-ubuntu |
1263 | +DTSTAMP:20160621T123718Z |
1264 | +DTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/America/Recife: |
1265 | + 20160624T200000 |
1266 | +DTEND;TZID=/freeassociation.sourceforge.net/Tzfile/America/Recife: |
1267 | + 20160624T203000 |
1268 | +TRANSP:OPAQUE |
1269 | +SEQUENCE:3 |
1270 | +SUMMARY:At night |
1271 | +CLASS:PUBLIC |
1272 | +CREATED:20160621T214124Z |
1273 | +LAST-MODIFIED:20160621T214208Z |
1274 | +RECURRENCE-ID;TZID=/freeassociation.sourceforge.net/Tzfile/America/Recife: |
1275 | + 20160624T100000 |
1276 | +END:VEVENT |
1277 | +END:VCALENDAR |
Comments inline