标签: rrule

如何在重复发生的事件中处理DST和TZ?

dateutil rrule是否支持DST和TZ?需要类似于iCalendar RRULE的东西.

如果不是 - 如何解决这个问题(安排重复发生的事件和DST偏移变化)

进口

>>> from django.utils import timezone
>>> import pytz
>>> from datetime import timedelta
>>> from dateutil import rrule
>>> now = timezone.now()
>>> pl = pytz.timezone("Europe/Warsaw")
Run Code Online (Sandbox Code Playgroud)

timedelta问题(需要具有相同的当地时间,但不同的DST偏移):

>>> pl.normalize(now)
datetime.datetime(2012, 9, 20, 1, 16, 58, 226000, tzinfo=<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>)    
>>> pl.normalize(now+timedelta(days=180))
datetime.datetime(2013, 3, 19, 0, 16, 58, 226000, tzinfo=<DstTzInfo 'Europe/Warsaw' CET+1:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)

rrule问题(每次出现时需要每个当地时间相同):

>>> r = rrule.rrule(3,dtstart=now,interval=180,count=2)
>>> pl.normalize(r[0])
datetime.datetime(2012, 9, 20, 1, 16, 58, tzinfo=<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>)
>>> pl.normalize(r[1])
datetime.datetime(2013, …
Run Code Online (Sandbox Code Playgroud)

python datetime pytz rrule python-dateutil

13
推荐指数
1
解决办法
3696
查看次数

寻找实现RRULE的JavaScript库(iCalendar RFC 5545)

我正在寻找一个在JaavScript中实现的良好的iCalendar RFC 5545处理库(开源/ GPL兼容).我目前感兴趣的是一个完全实现RRULE的js库,这样我们就可以使用与HTML5兼容的浏览器离线使用我们的日历Web应用程序.

我们有我们的UI,所以只是一个可用的库,可以生成RRULE,事件日期是我们需要的.我甚至想过联系创建python dateutil的人,看看我们是否可以将他的库移植到js.

我们需要的例子包括:

  1. 给定原始数据(由我们现有的UI提供),构建包括RRULE的iCalendar VEVENT信息.
  2. 给定VCALENDAR/VEVENT对象,生成适当的iCalendar文本字符串,我可以使用HTML5在本地存储,直到客户端连接到服务器.
  3. 给定一个带有RRULE的VCALENDAR/VEVENT对象,可以说"从某个日期给我下一个X次出现的开始/结束日期"或"给我所有出现的开始/结束日期,直到日期Y".

任何线索,想法或建议都非常感谢.

javascript html5 icalendar rrule rfc5545

10
推荐指数
1
解决办法
4846
查看次数

Python dateutils根据iCalendar格式打印重复规则(参见RFC 5545)

我试图将重复规则打印为iCalendar格式指定的字符串(请参阅RFC 5545).我使用python dateutils,特别是dateutil.rrule来创建重复规则,我想将其打印为字符串,如:

    "RRULE:FREQ=DAILY;COUNT=5"
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我是否有方法来实现这一目标?

我想我正在使用labix dateutils btw.

非常感谢!

python rrule python-dateutil rfc5545

9
推荐指数
1
解决办法
1586
查看次数

在Android中没有Intent的特定日期创建带有提醒的重复事件?

我有一个Android应用程序下载服务一些药物信息.

例如(fludex white round 2 24-02-2012),意思是一种名为fludex,白色和圆形的药物,从今天起每天必须给予2次,直到24-01-2012.

现在我想在药物信息下载之后,以静默/编程方式向日历添加重复的药物信息事件(无需用户交互).所以,从今天开始,直到每天上午10点到晚上10点,才会在10分钟前提醒他服药.我的应用程序将用于Android 2-4.我怎么能这样做,到目前为止我对我的搜索感到困惑.

第二个问题:我如何只删除从我的应用程序中制作的事件(及其提醒),所以当我同步我的药物治疗以删除所有先前的事件并根据我从我的服务收到的新药物治疗产生新事件?

android reminders calendar rrule

8
推荐指数
1
解决办法
2万
查看次数

如何匹配dateuilts.rrule和python icalendar daylightsavingtime意识到

我正在处理一些琐事.

我有一个ical事件.

BEGIN:VEVENT
UID:Event/termine/gps/akt@portal.augusta.de 
DTSTART;TZID=CET:20150529T190000
DTEND;TZID=CET:20150529T220000
CATEGORIES:Arbeitsgruppe
DTSTAMP:20110620T075538Z
EXDATE;TZID=CET:20151225T190000
LAST-MODIFIED:20150424T201707Z
LOCATION:Vereinsräume des Augsburger Computer Forum e.V.
PRIORITY:5
RRULE:FREQ=MONTHLY;BYDAY=-1FR
SUMMARY:GPS-Arbeitsgruppe
URL:https://www.augusta.de/termine/gps
END:VEVENT
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,每个月的最后一个星期五有一个RRule重复这个事件.

我用icalendar解析了这个ical.

我正在使用:

start = iobj.get( 'DTSTART' ).dt
rrset = rruleset()
rrule = iobj.get( 'RRULE' )
exdate = iobj.get( 'EXDATE' )
rrset.rrule( rrule.rrulestr( rule.to_ical(), dtstart = start ) )
for edate in exdate.dts : 
    rrset.exdate( edate.dt )
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好.

当我尝试下一个说10个日期时:

list(rrset)[:10] 
Run Code Online (Sandbox Code Playgroud)

我明白了:

[datetime.datetime(2015, 5, 29, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>),
 datetime.datetime(2015, 6, 26, 19, 0, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>), …
Run Code Online (Sandbox Code Playgroud)

python icalendar datetime date rrule

8
推荐指数
0
解决办法
537
查看次数

如何查询在数据库表中存储为 iCal RRULE 的定期约会?

如果我有一个包含以下列的约会表,我如何查询规则以提取发生在特定日期或两个日期之间的约会?

Appointments
------
id
name
dt_start
dt_end
rrule
Run Code Online (Sandbox Code Playgroud)

例如,假设我有一个约会,从 2016 年 9 月 28 日开始,到 2017 年 4 月 28 日结束,并且每两周在周一、周五到 2017 年 4 月 28 日发生一次。以下将是 RRule:

RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=20170428T230000Z;BYDAY=MO,FR EXDATE:20170414T023000Z
Run Code Online (Sandbox Code Playgroud)

因此,使用上面的示例,上述约会发生的一些日期将包括以下内容:

2016-09-30 FRI
2016-10-10 MO
2016-10-14 FRI
2016-10-24 MO
Run Code Online (Sandbox Code Playgroud)

现在如何使用 SQL 或任何其他方法查询此表以提取 2016 年 10 月 10 日发生的所有约会?

为了记录,这将在 C# asp.net 和 SQL 服务器中完成。是否有可用于解析和查询规则的 C# 或 SQL Server 库?

我看过ICAL.net,但似乎没有太多关于它的文档,或者我将如何使用它来达到上述目的。

有没有人对 ICAL.net 有任何经验?

sql sql-server jquery icalendar rrule

8
推荐指数
1
解决办法
2691
查看次数

在处理之前从rrule中排除日历假日

我正在使用python-dateutil包中的rrule方法.我想创建一个可以忽略假日日历中的日期的规则.我知道exdate()方法,但这似乎只是从生成的输出列表中过滤日期.

from dateutil.rrule import *
from datetime import datetime

set = rruleset()
set.rrule(rrule(MONTHLY, count=4, bysetpos=-1, byweekday=(MO, TU, WE, TH, FR), dtstart=datetime(2013,1,1)))
list(set)
# outputs 4 dates without an exdate() call
> [datetime.datetime(2013, 1, 31, 0, 0), datetime.datetime(2013, 2, 28, 0, 0), datetime.datetime(2013, 3, 29, 0, 0), datetime.datetime(2013, 4, 30, 0, 0)]

set.exdate(datetime.datetime(2013, 2, 28, 0, 0))
list(set)
# only outputs 3 dates, ignoring the date provided in exdate()
> [datetime.datetime(2013, 1, 31, 0, 0), datetime.datetime(2013, 3, …
Run Code Online (Sandbox Code Playgroud)

python rrule python-dateutil

7
推荐指数
0
解决办法
984
查看次数

rrule 获取每个月的第二个周一、周三和周五

我正在尝试为我的全日历事件创建一个规则,该规则发生在每个月的第二个星期一、星期三和星期五。

这是我尝试过的规则

RRULE:FREQ=MONTHLY;COUNT=10;INTERVAL=1;WKST=SU;BYDAY=MO、WE、FR;BYSETPOS=2

events: [{
          title: 'rrule event',
          rrule: {
           freq: RRule.MONTHLY,
               count: 10,
               interval: 1,
               wkst: RRule.SU,
               byweekday: [RRule.MO, RRule.WE, RRule.FR],
               bysetpos: [2]
            },
            duration: '02:00',
        rendering: 'inverse-background'
         }
        ],
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

1   Fri,    03  May 2019    12:33:53    GMT
2   Wed,    05  Jun 2019    12:33:53    GMT
3   Wed,    03  Jul 2019    12:33:53    GMT
4   Mon,    05  Aug 2019    12:33:53    GMT
5   Wed,    04  Sep 2019    12:33:53    GMT
6   Fri,    04  Oct 2019    12:33:53    GMT
7   Mon,    04  Nov 2019    12:33:53 …
Run Code Online (Sandbox Code Playgroud)

rrule fullcalendar

7
推荐指数
1
解决办法
1852
查看次数

rrule.js - 重复序列在夏令时后更改时区中的时间

我有一个看起来非常常见的用例:我想要一个在特定时区每天同一时间发生的重复事件(在下面的示例中,美国/丹佛时区的上午 6:00)。我希望在夏令时更改后像以前一样在一天中的同一时间重复出现这种情况。目前,它在夏令时后一小时发生变化,这似乎表明在生成循环日期时间时未考虑夏令时。

我已经尝试了 rrule 的各种配置,如此此处的文档中所示。它说夏令时期间的时间应该相同,但这不是我所看到的。

代码示例

const rrule = new RRule({
  freq: RRule.DAILY,
  dtstart: new Date(Date.UTC(2022, 7, 18, 12, 0, 0)),
  // tzid: 'America/Denver', // output is the same whether this is included or not
})
const datetimes = rrule.between(
  new Date('2022-10-31'),
  new Date('2022-11-10')
)
Run Code Online (Sandbox Code Playgroud)

尝试一下CodeSandbox。只要您位于实行夏令时的时区并且between范围包括夏令时的变化,就应该得到类似的结果。

预期产出

夏令时后,美国/丹佛时区的时间不应改变(即重复应考虑夏令时):

Mon Oct 31 2022 06:00:00 GMT-0600 (Mountain Daylight Time)
Tue Nov 01 2022 06:00:00 GMT-0600 (Mountain Daylight Time)
Wed Nov 02 2022 06:00:00 GMT-0600 …
Run Code Online (Sandbox Code Playgroud)

javascript icalendar datetime rrule dst

7
推荐指数
1
解决办法
1328
查看次数

在更改视图网格 fullcalendar v4 上拖放后,带有 rrule 插件的事件未更新

我目前正在使用 rrule 插件开发 Fullcalendar v4

我有这个代码

var calendarEl = document.getElementById('calendardemo');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: ['interaction', 'dayGrid', 'timeGrid', 'momentTimezone', 'rrule', 'list'],
header: {
     left: 'prev,next today',
     center: 'title',
     right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
editable: true,
events: [
{ // standard property
     title: 'This is sample event',
     start: '2019-12-29', 
     end: '2019-12-31'
},
{
     title: 'event with rrule plugin',
     rrule: {
          freq: 'weekly',
          interval: 5,
          byweekday: [ 'mo', 'fr' ],
          dtstart: '2019-12-29T10:30:00',
          until: '2020-12-31'
     }
}
]
});
calendar.render();

Run Code Online (Sandbox Code Playgroud)

请注意:

{ // …
Run Code Online (Sandbox Code Playgroud)

javascript rrule fullcalendar fullcalendar-4

6
推荐指数
1
解决办法
197
查看次数