2014-12-31 3 views
1

У меня возникла следующая проблема. Я создаю файл календаря .ics, используя icalendar gem (https://github.com/icalendar/icalendar). Например, я пишу во времени, так как:Ical меняет время, которое я вставляю при создании файла .ics

def make_ical(email) 
    cal = Icalendar::Calendar.new 
    cal.event do |e| 
    e.dtstart = Icalendar::Values::Datetime.new('20141230T193400') 
    e.dtend = Icalendar::Values::Datetime.new('20141230T213400') 
    .. 
    end 
end 

Но когда он строит .ics файл, он показывает другое время, чем то, что я кладу в подозреваю, что превращает его в какой-то часовой пояс.. Как я могу предотвратить это? Или, может быть, есть способ изменить начальное время, поэтому, если он должен преобразовать, он будет преобразовывать его правильно. Пожалуйста помоги.

calendar.ics файл:

BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:icalendar-ruby 
CALSCALE:GREGORIAN 
BEGIN:VEVENT 
DTSTAMP:20141231T173138Z 
UID:... 
DTSTART:20141011T081000 
DTEND:20141012T081000 
CLASS:PRIVATE 
DESCRIPTION:Blah blah blah 
SUMMARY:Secrets of Alchemy 
BEGIN:VALARM 
ACTION:EMAIL 
TRIGGER:-P1D 
DESCRIPTION:Event reminder 
SUMMARY:Alarm notification 
ATTENDEE: 
ATTENDEE: 
END:VALARM 
END:VEVENT 
END:VCALENDAR 

Не обращайте внимание на конец времени, но в любой из них, время часть изменений даты и времени. Я хотел бы как-то показать правильное время.

ответ

1

Добавить в Gemfile: -

gem 'tzinfo' 
gem 'tzinfo-data' 

Затем внести изменения в: -

require 'icalendar/tzinfo' 
require 'tzinfo' 

cal = Icalendar::Calendar.new 

event_start = DateTime.new 2014, 12, 30, 19, 34, 00 
event_end = DateTime.new 2014, 12, 30, 21, 34, 00 

tzid = "America/Chicago" 
tz = TZInfo::Timezone.get tzid 
timezone = tz.ical_timezone event_start 
cal.add_timezone timezone 

cal.event do |e| 
    e.dtstart = Icalendar::Values::DateTime.new event_start, 'tzid' => tzid 
    e.dtend = Icalendar::Values::DateTime.new event_end, 'tzid' => tzid 
end 

Отправить эту ИМС в качестве вложения в электронной почте, как: -

attachments["schedule.ics"] = {:mime_type => 'text/calendar', 
    :content => cal.to_ical} 

Примечание: -

event_start и event_end необходимо сделать в том же часовом поясе как tzid, тогда он автоматически преобразит правильное время в соответствии с часовым поясом, в котором этот файл будет открыт.

+0

Хм ... Я просто попытался это и он не работает для меня. Он по-прежнему делает то же самое. – Chemist