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) 我正在寻找一个在JaavScript中实现的良好的iCalendar RFC 5545处理库(开源/ GPL兼容).我目前感兴趣的是一个完全实现RRULE的js库,这样我们就可以使用与HTML5兼容的浏览器离线使用我们的日历Web应用程序.
我们有我们的UI,所以只是一个可用的库,可以生成RRULE,事件日期是我们需要的.我甚至想过联系创建python dateutil的人,看看我们是否可以将他的库移植到js.
我们需要的例子包括:
任何线索,想法或建议都非常感谢.
我试图将重复规则打印为iCalendar格式指定的字符串(请参阅RFC 5545).我使用python dateutils,特别是dateutil.rrule来创建重复规则,我想将其打印为字符串,如:
"RRULE:FREQ=DAILY;COUNT=5"
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我是否有方法来实现这一目标?
我想我正在使用labix dateutils btw.
非常感谢!
我有一个Android应用程序下载服务一些药物信息.
例如(fludex white round 2 24-02-2012),意思是一种名为fludex,白色和圆形的药物,从今天起每天必须给予2次,直到24-01-2012.
现在我想在药物信息下载之后,以静默/编程方式向日历添加重复的药物信息事件(无需用户交互).所以,从今天开始,直到每天上午10点到晚上10点,才会在10分钟前提醒他服药.我的应用程序将用于Android 2-4.我怎么能这样做,到目前为止我对我的搜索感到困惑.
第二个问题:我如何只删除从我的应用程序中制作的事件(及其提醒),所以当我同步我的药物治疗以删除所有先前的事件并根据我从我的服务收到的新药物治疗产生新事件?
我正在处理一些琐事.
我有一个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) 如果我有一个包含以下列的约会表,我如何查询规则以提取发生在特定日期或两个日期之间的约会?
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 有任何经验?
我正在使用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) 我正在尝试为我的全日历事件创建一个规则,该规则发生在每个月的第二个星期一、星期三和星期五。
这是我尝试过的规则
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) 我有一个看起来非常常见的用例:我想要一个在特定时区每天同一时间发生的重复事件(在下面的示例中,美国/丹佛时区的上午 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) 我目前正在使用 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)