2010-12-02 13 views
2

私は以下のイベントを設定して、icalendar gemでイベントをエクスポートします。一日中、それはこのように見える必要があるイベントを作るために終日イベントicalendar gem

@calendar = Icalendar::Calendar.new 

event = Icalendar::Event.new 
event.dtstart = ev.start_at.strftime("%Y%m%d") 
event.dtend = ev.end_at.strftime("%Y%m%d") 
event.summary = ev.summary 

@calendar.add 

DTSTART;VALUE=DATE:20101117 
DTEND;VALUE=DATE:20101119 

今私は

event.dtstart = "$VALUE=DATE:"+ev.start_at.strftime("%Y%m%d")" 

この意志出力

DTSTART:$VALUE=DATE:20101117 
を使用しています

を入力し、すべての ":$"を ";"に置き換えます

@allday = @calendar.to_ical.gsub(":$", ";") 

さらに日付を保存するより直接的な方法はありますか?

答えて

5

私はこれと一緒に遊んで、1つの方法を考え出しました。イベント日付にプロパティをキーと値のペアの形式で割り当てることができます。 VALUEプロパティを次のように割り当てることができます。

event = Icalendar::Event.new 
event.dtstart = Date.new(2010,12,1) 
event.dtstart.ical_params = { "VALUE" => "DATE" } 
puts event.to_ical 

# output 
BEGIN:VEVENT 
DTSTAMP:20101201T230134 
DTSTART;VALUE=DATE:20101201 
SEQUENCE:0 
UID:2010-12-01T23:01:34-08:[email protected] 
END:VEVENT 

今、楽しい部分です。あなたがイベントを作成し、そのプロパティで日付を初期化ブロックに渡すことができますカレンダーを考える:

calendar.event do 
    dtstart Date.new(2010,11,17), ical_params = {"VALUE"=>"DATE"} 
    dtend Date.new(2010,11,19), ical_params = {"VALUE"=>"DATE"} 
end 
+0

これははるかに良いアプローチのようです。ありがとう – fchasen

3

だから、このスレッドはかなり古いようだ(とのiCalendar宝石の最新バージョンで問題が解決しませんでした - 2.3.0)。私は最近、ics形式の "終日"のカレンダーイベントを作成しなければなりませんでした。私は、これははるかに良い解決策であることが判明(とあなたはカレンダーはそれを処理することを期待したい方法動作しているようです)しました - 上記のコードは次のような出力生成

date = Date.new(2010,11,17) 
event = Icalendar::Event.new 
event.dtstart = Icalendar::Values::Date.new date 
event.dtstart.ical_param "VALUE", "DATE" 
event.dtend = Icalendar::Values::Date.new (date + 1.day) 
event.dtend.ical_param "VALUE", "DATE" 
puts event.to_ical 

以下のスニペットを参照してください。

BEGIN:VEVENT 
DTSTAMP:20150521T162712Z 
UID:4c239930-15ba-44b4-a045-c6fae3d858d2 
DTSTART;VALUE=DATE:20101117 
DTEND;VALUE=DATE:20101118 
END:VEVENT 

日付には時刻が関連付けられていないことに注意してください。以前の返信のコードは現在時間を生成します。私はこのソリューションを理解するためにicalendarのソースコードを掘り下げなければなりませんでした。

私はこれが他の人に役立つことを願っています。

乾杯!

関連する問題