From ced1fdac3e5d5650ccd87fb7f529d24e0644498c Mon Sep 17 00:00:00 2001 From: Mylloon Date: Tue, 16 Aug 2022 17:56:24 +0200 Subject: [PATCH] add timezone --- src/ics.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/ics.rs b/src/ics.rs index 5534617..c1b44c8 100644 --- a/src/ics.rs +++ b/src/ics.rs @@ -1,11 +1,24 @@ +use chrono::TimeZone; use ics::{ + parameters, properties::{Class, Description, DtEnd, DtStart, Location, Summary, Transp}, - Event, ICalendar, + Event, ICalendar, Standard, }; pub fn export(courses: Vec, filename: &str) { let mut calendar = ICalendar::new("2.0", "cal8tor"); + // Add Europe/Paris timezone + let timezone_name = "Europe/Paris"; + calendar.add_timezone(ics::TimeZone::standard( + timezone_name, + Standard::new( + dt_ical(chrono::Utc.ymd(1970, 1, 1).and_hms(0, 0, 0)), + "+0100", + "+0200", + ), + )); + // Create events which contains the information regarding the course for course in courses { let mut event = Event::new( @@ -25,10 +38,14 @@ pub fn export(courses: Vec, filename: &str) { } // Start time of the course - event.push(DtStart::new(dt_ical(course.dtstart.unwrap()))); + let mut date_start = DtStart::new(dt_ical(course.dtstart.unwrap())); + date_start.append(parameters!("TZID" => timezone_name)); + event.push(date_start); // End time of the course - event.push(DtEnd::new(dt_ical(course.dtend.unwrap()))); + let mut date_end = DtEnd::new(dt_ical(course.dtend.unwrap())); + date_end.append(parameters!("TZID" => timezone_name)); + event.push(date_end); // Room location event.push(Location::new(course.room)); @@ -46,5 +63,5 @@ pub fn export(courses: Vec, filename: &str) { /// Transform the datetime from chrono to the ICS format /// See fn dt_ical(dt: chrono::DateTime) -> String { - format!("{}", dt.format("%Y%m%dT%H%M%SZ")) + format!("{}", dt.format("%Y%m%dT%H%M%S")) }