首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全天活动icalendar gem

全天活动icalendar gem
EN

Stack Overflow用户
提问于 2010-12-02 08:48:29
回答 2查看 2.9K关注 0票数 3

我正在使用下面的代码设置一个事件,以便使用icalendar gem导出到ical。

代码语言:javascript
复制
@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

为了让事件发生一整天,它需要看起来像这样:

代码语言:javascript
复制
DTSTART;VALUE=DATE:20101117
DTEND;VALUE=DATE:20101119

现在我正在使用

代码语言:javascript
复制
event.dtstart = "$VALUE=DATE:"+ev.start_at.strftime("%Y%m%d")"

这将输出

代码语言:javascript
复制
DTSTART:$VALUE=DATE:20101117

然后我将所有":$“替换为";”

代码语言:javascript
复制
@allday = @calendar.to_ical.gsub(":$", ";")

有没有更直接的方法将日期保存为全天?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-02 15:32:35

我尝试了一下,想出了一种方法。您可以将属性以键-值对的形式分配给事件日期。因此,您可以像这样分配VALUE属性:

代码语言:javascript
复制
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:00_923426206@ubuntu
END:VEVENT

现在是有趣的部分。给定一个日历,您可以创建一个事件并将其传递到一个块中,该块使用其属性初始化日期:

代码语言:javascript
复制
calendar.event do
  dtstart Date.new(2010,11,17), ical_params = {"VALUE"=>"DATE"}
  dtend Date.new(2010,11,19), ical_params = {"VALUE"=>"DATE"}
end
票数 5
EN

Stack Overflow用户

发布于 2015-05-22 00:30:19

所以这个线程看起来很旧(并且没有解决最新版本的icalendar gem -2.3.0的问题)。我最近不得不创建ics格式的“全天”日历事件。我发现这是一个更好的解决方案(而且工作方式似乎与您期望的日历处理方式相同)-请参阅下面的代码片段

代码语言:javascript
复制
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

上面的代码产生以下输出:

代码语言:javascript
复制
BEGIN:VEVENT
DTSTAMP:20150521T162712Z
UID:4c239930-15ba-44b4-a045-c6fae3d858d2
DTSTART;VALUE=DATE:20101117
DTEND;VALUE=DATE:20101118
END:VEVENT

请注意,该日期没有与之关联的时间。先前回复中的代码当前生成时间。我不得不深入研究icalendar的源代码来找出这个解决方案。

我希望这对其他人有帮助。

干杯!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4330672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档