本文整理汇总了Python中pycalendar.datetime.DateTime.duplicate方法的典型用法代码示例。如果您正苦于以下问题:Python DateTime.duplicate方法的具体用法?Python DateTime.duplicate怎么用?Python DateTime.duplicate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pycalendar.datetime.DateTime
的用法示例。
在下文中一共展示了DateTime.duplicate方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: testCachePreserveOnAdjustment
# 需要导入模块: from pycalendar.datetime import DateTime [as 别名]
# 或者: from pycalendar.datetime.DateTime import duplicate [as 别名]
def testCachePreserveOnAdjustment(self):
# UTC first
dt = DateTime(2012, 6, 7, 12, 0, 0, Timezone(tzid="utc"))
dt.getPosixTime()
# check existing cache is complete
self.assertTrue(dt.mPosixTimeCached)
self.assertNotEqual(dt.mPosixTime, 0)
self.assertEqual(dt.mTZOffset, None)
# duplicate preserves cache details
dt2 = dt.duplicate()
self.assertTrue(dt2.mPosixTimeCached)
self.assertEqual(dt2.mPosixTime, dt.mPosixTime)
self.assertEqual(dt2.mTZOffset, dt.mTZOffset)
# adjust preserves cache details
dt2.adjustToUTC()
self.assertTrue(dt2.mPosixTimeCached)
self.assertEqual(dt2.mPosixTime, dt.mPosixTime)
self.assertEqual(dt2.mTZOffset, dt.mTZOffset)
# Now timezone
tzdata = """BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//calendarserver.org//Zonal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:America/Pittsburgh
BEGIN:STANDARD
DTSTART:18831118T120358
RDATE:18831118T120358
TZNAME:EST
TZOFFSETFROM:-045602
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19180331T020000
RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19181027T020000
RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:STANDARD
DTSTART:19200101T000000
RDATE:19200101T000000
RDATE:19420101T000000
RDATE:19460101T000000
RDATE:19670101T000000
TZNAME:EST
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19200328T020000
RDATE:19200328T020000
RDATE:19740106T020000
RDATE:19750223T020000
TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19201031T020000
RDATE:19201031T020000
RDATE:19450930T020000
TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19210424T020000
RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
TZNAME:EDT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19210925T020000
RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
TZNAME:EST
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19420209T020000
RDATE:19420209T020000
TZNAME:EWT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
BEGIN:DAYLIGHT
#.........这里部分代码省略.........
示例2: expand
# 需要导入模块: from pycalendar.datetime import DateTime [as 别名]
# 或者: from pycalendar.datetime.DateTime import duplicate [as 别名]
def expand(self, rules, minYear, maxYear):
"""
Expand this zone into a set of transitions.
@param rules: parsed Rules for the tzdb
@type rules: C{dict}
@param minYear: starting year
@type minYear: C{int}
@param maxYear: ending year
@type maxYear: C{int}
@return: C{list} of C{tuple} for (
transition date-time,
offset to,
offset from,
associated rule,
)
"""
# Start at 1/1/1800 with the offset from the initial zone rule
start = DateTime(year=1800, month=1, day=1, hours=0, minutes=0, seconds=0)
start_offset = self.rules[0].getUTCOffset()
start_stdoffset = self.rules[0].getUTCOffset()
startdt = start.duplicate()
# Now add each zone rules dates
transitions = []
lastUntilDateUTC = start.duplicate()
last_offset = start_offset
last_stdoffset = start_stdoffset
first = True
for zonerule in self.rules:
last_offset, last_stdoffset = zonerule.expand(rules, transitions, lastUntilDateUTC, last_offset, last_stdoffset, maxYear)
lastUntilDate = zonerule.getUntilDate()
lastUntilDateUTC = lastUntilDate.getUTC(last_offset, last_stdoffset)
# We typically don't care about the initial one
if first and len(self.rules) > 1:
transitions = []
first = False
# Sort the results by date
transitions.sort(cmp=lambda x, y: x[0].compareDateTime(y[0]))
# Now scan transitions looking for real changes and note those
results = []
last_transition = (startdt, start_offset, start_offset)
for transition in transitions:
dtutc, to_offset, zonerule, rule = transition
dt = dtutc.duplicate()
dt.offsetSeconds(last_transition[1])
if dtutc.getYear() >= minYear:
if dt > last_transition[0]:
results.append((dt, last_transition[1], to_offset, zonerule, rule))
elif dt <= last_transition[0]:
if len(results):
results[-1] = ((results[-1][0], results[-1][1], to_offset, zonerule, None))
else:
results.append((last_transition[0], last_transition[1], last_transition[2], zonerule, None))
last_transition = (dt, to_offset, last_transition[2], rule)
return results
示例3: ComponentRecur
# 需要导入模块: from pycalendar.datetime import DateTime [as 别名]
# 或者: from pycalendar.datetime.DateTime import duplicate [as 别名]
class ComponentRecur(Component):
propertyCardinality_STATUS_Fix = (
definitions.cICalProperty_STATUS,
)
@staticmethod
def mapKey(uid, rid=None):
if uid:
result = "u:" + uid
if rid is not None:
result += rid
return result
else:
return None
@staticmethod
def sort_by_dtstart_allday(e1, e2):
if e1.self.mStart.isDateOnly() and e2.self.mStart.isDateOnly():
return e1.self.mStart < e2.self.mStart
elif e1.self.mStart.isDateOnly():
return True
elif (e2.self.mStart.isDateOnly()):
return False
elif e1.self.mStart == e2.self.mStart:
if e1.self.mEnd == e2.self.mEnd:
# Put ones created earlier in earlier columns in day view
return e1.self.mStamp < e2.self.mStamp
else:
# Put ones that end later in earlier columns in day view
return e1.self.mEnd > e2.self.mEnd
else:
return e1.self.mStart < e2.self.mStart
@staticmethod
def sort_by_dtstart(e1, e2):
if e1.self.mStart == e2.self.mStart:
if (
e1.self.mStart.isDateOnly() and e2.self.mStart.isDateOnly() or
not e1.self.mStart.isDateOnly() and not e2.self.mStart.isDateOnly()
):
return False
else:
return e1.self.mStart.isDateOnly()
else:
return e1.self.mStart < e2.self.mStart
def __init__(self, parent=None):
super(ComponentRecur, self).__init__(parent=parent)
self.mMaster = self
self.mMapKey = None
self.mSummary = None
self.mStamp = DateTime()
self.mHasStamp = False
self.mStart = DateTime()
self.mHasStart = False
self.mEnd = DateTime()
self.mHasEnd = False
self.mDuration = False
self.mHasRecurrenceID = False
self.mAdjustFuture = False
self.mAdjustPrior = False
self.mRecurrenceID = None
self.mRecurrences = None
# This is a special check we do only for STATUS due to a calendarserver bug
self.cardinalityChecks += (
self.check_cardinality_STATUS_Fix,
)
def duplicate(self, parent=None):
other = super(ComponentRecur, self).duplicate(parent=parent)
# Special determination of master
other.mMaster = self.mMaster if self.recurring() else self
other.mMapKey = self.mMapKey
other.mSummary = self.mSummary
if (self.mStamp is not None):
other.mStamp = self.mStamp.duplicate()
other.mHasStamp = self.mHasStamp
other.mStart = self.mStart.duplicate()
other.mHasStart = self.mHasStart
other.mEnd = self.mEnd.duplicate()
other.mHasEnd = self.mHasEnd
other.mDuration = self.mDuration
other.mHasRecurrenceID = self.mHasRecurrenceID
other.mAdjustFuture = self.mAdjustFuture
other.mAdjustPrior = self.mAdjustPrior
if self.mRecurrenceID is not None:
other.mRecurrenceID = self.mRecurrenceID.duplicate()
#.........这里部分代码省略.........
示例4: VToDo
# 需要导入模块: from pycalendar.datetime import DateTime [as 别名]
# 或者: from pycalendar.datetime.DateTime import duplicate [as 别名]
class VToDo(ComponentRecur):
OVERDUE = 0
DUE_NOW = 1
DUE_LATER = 2
DONE = 3
CANCELLED = 4
@staticmethod
def sort_for_display(e1, e2):
s1 = e1.getMaster()
s2 = e2.getMaster()
# Check status first (convert None -> Needs action for tests)
status1 = s1.self.mStatus
status2 = s2.self.mStatus
if status1 == definitions.eStatus_VToDo_None:
status1 = definitions.eStatus_VToDo_NeedsAction
if status2 == definitions.eStatus_VToDo_None:
status2 = definitions.eStatus_VToDo_NeedsAction
if status1 != status2:
# More important ones at the top
return status1 < status2
# At this point the status of each is the same
# If status is cancelled sort by start time
if s1.self.mStatus == definitions.eStatus_VToDo_Cancelled:
# Older ones at the bottom
return s1.mStart > s2.mStart
# If status is completed sort by completion time
if s1.self.mStatus == definitions.eStatus_VToDo_Completed:
# Older ones at the bottom
return s1.self.mCompleted > s2.self.mCompleted
# Check due date exists
if s1.mHasEnd != s2.mHasEnd:
now = DateTime()
now.setToday()
# Ones with due dates after today below ones without due dates
if s1.hasEnd():
return s1.mEnd <= now
elif s2.hasEnd():
return now < s2.mEnd
# Check due dates if present
if s1.mHasEnd:
if s1.mEnd != s2.mEnd:
# Soonest dues dates above later ones
return s1.mEnd < s2.mEnd
# Check priority next
if s1.self.mPriority != s2.self.mPriority:
# Higher priority above lower ones
return s1.self.mPriority < s2.self.mPriority
# Just use start time - older ones at the top
return s1.mStart < s2.mStart
propertyCardinality_1 = (
definitions.cICalProperty_DTSTAMP,
definitions.cICalProperty_UID,
)
propertyCardinality_0_1 = (
definitions.cICalProperty_CLASS,
definitions.cICalProperty_COMPLETED,
definitions.cICalProperty_CREATED,
definitions.cICalProperty_DESCRIPTION,
definitions.cICalProperty_DTSTART,
definitions.cICalProperty_GEO,
definitions.cICalProperty_LAST_MODIFIED,
definitions.cICalProperty_LOCATION,
definitions.cICalProperty_ORGANIZER,
definitions.cICalProperty_PERCENT_COMPLETE,
definitions.cICalProperty_PRIORITY,
definitions.cICalProperty_RECURRENCE_ID,
definitions.cICalProperty_SEQUENCE,
# definitions.cICalProperty_STATUS, # Special fix done for multiple STATUS
definitions.cICalProperty_SUMMARY,
definitions.cICalProperty_URL,
definitions.cICalProperty_RRULE,
definitions.cICalProperty_DUE,
definitions.cICalProperty_DURATION,
)
propertyValueChecks = ICALENDAR_VALUE_CHECKS
def __init__(self, parent=None):
super(VToDo, self).__init__(parent=parent)
self.mPriority = 0
self.mStatus = definitions.eStatus_VToDo_None
self.mPercentComplete = 0
self.mCompleted = DateTime()
self.mHasCompleted = False
def duplicate(self, parent=None):
#.........这里部分代码省略.........
示例5: VAlarm
# 需要导入模块: from pycalendar.datetime import DateTime [as 别名]
# 或者: from pycalendar.datetime.DateTime import duplicate [as 别名]
class VAlarm(Component):
sActionMap = {
definitions.cICalProperty_ACTION_AUDIO: definitions.eAction_VAlarm_Audio,
definitions.cICalProperty_ACTION_DISPLAY: definitions.eAction_VAlarm_Display,
definitions.cICalProperty_ACTION_EMAIL: definitions.eAction_VAlarm_Email,
definitions.cICalProperty_ACTION_PROCEDURE: definitions.eAction_VAlarm_Procedure,
definitions.cICalProperty_ACTION_URI: definitions.eAction_VAlarm_URI,
definitions.cICalProperty_ACTION_NONE: definitions.eAction_VAlarm_None,
}
sActionValueMap = {
definitions.eAction_VAlarm_Audio: definitions.cICalProperty_ACTION_AUDIO,
definitions.eAction_VAlarm_Display: definitions.cICalProperty_ACTION_DISPLAY,
definitions.eAction_VAlarm_Email: definitions.cICalProperty_ACTION_EMAIL,
definitions.eAction_VAlarm_Procedure: definitions.cICalProperty_ACTION_PROCEDURE,
definitions.eAction_VAlarm_URI: definitions.cICalProperty_ACTION_URI,
definitions.eAction_VAlarm_None: definitions.cICalProperty_ACTION_NONE,
}
# Classes for each action encapsulating action-specific data
class VAlarmAction(object):
propertyCardinality_1 = ()
propertyCardinality_1_Fix_Empty = ()
propertyCardinality_0_1 = ()
propertyCardinality_1_More = ()
def __init__(self, type):
self.mType = type
def duplicate(self):
return VAlarm.VAlarmAction(self.mType)
def load(self, valarm):
pass
def add(self, valarm):
pass
def remove(self, valarm):
pass
def getType(self):
return self.mType
class VAlarmAudio(VAlarmAction):
propertyCardinality_1 = (
definitions.cICalProperty_ACTION,
definitions.cICalProperty_TRIGGER,
)
propertyCardinality_0_1 = (
definitions.cICalProperty_DURATION,
definitions.cICalProperty_REPEAT,
definitions.cICalProperty_ATTACH,
definitions.cICalProperty_ACKNOWLEDGED,
)
def __init__(self, speak=None):
super(VAlarm.VAlarmAudio, self).__init__(type=definitions.eAction_VAlarm_Audio)
self.mSpeakText = speak
def duplicate(self):
return VAlarm.VAlarmAudio(self.mSpeakText)
def load(self, valarm):
# Get properties
self.mSpeakText = valarm.loadValueString(definitions.cICalProperty_ACTION_X_SPEAKTEXT)
def add(self, valarm):
# Delete existing then add
self.remove(valarm)
prop = Property(definitions.cICalProperty_ACTION_X_SPEAKTEXT, self.mSpeakText)
valarm.addProperty(prop)
def remove(self, valarm):
valarm.removeProperties(definitions.cICalProperty_ACTION_X_SPEAKTEXT)
def isSpeakText(self):
return len(self.mSpeakText) != 0
def getSpeakText(self):
return self.mSpeakText
class VAlarmDisplay(VAlarmAction):
propertyCardinality_1 = (
definitions.cICalProperty_ACTION,
definitions.cICalProperty_TRIGGER,
)
propertyCardinality_1_Fix_Empty = (
definitions.cICalProperty_DESCRIPTION,
)
#.........这里部分代码省略.........
示例6: VFreeBusy
# 需要导入模块: from pycalendar.datetime import DateTime [as 别名]
# 或者: from pycalendar.datetime.DateTime import duplicate [as 别名]
class VFreeBusy(Component):
propertyCardinality_1 = (
definitions.cICalProperty_DTSTAMP,
definitions.cICalProperty_UID,
)
propertyCardinality_0_1 = (
definitions.cICalProperty_CONTACT,
definitions.cICalProperty_DTSTART,
definitions.cICalProperty_DTEND,
definitions.cICalProperty_ORGANIZER,
definitions.cICalProperty_URL,
)
propertyValueChecks = ICALENDAR_VALUE_CHECKS
def __init__(self, parent=None):
super(VFreeBusy, self).__init__(parent=parent)
self.mStart = DateTime()
self.mHasStart = False
self.mEnd = DateTime()
self.mHasEnd = False
self.mDuration = False
self.mCachedBusyTime = False
self.mSpanPeriod = None
self.mBusyTime = None
def duplicate(self, parent=None):
other = super(VFreeBusy, self).duplicate(parent=parent)
other.mStart = self.mStart.duplicate()
other.mHasStart = self.mHasStart
other.mEnd = self.mEnd.duplicate()
other.mHasEnd = self.mHasEnd
other.mDuration = self.mDuration
other.mCachedBusyTime = False
other.mBusyTime = None
return other
def getType(self):
return definitions.cICalComponent_VFREEBUSY
def getMimeComponentName(self):
return itipdefinitions.cICalMIMEComponent_VFREEBUSY
def finalise(self):
# Do inherited
super(VFreeBusy, self).finalise()
# Get DTSTART
temp = self.loadValueDateTime(definitions.cICalProperty_DTSTART)
self.mHasStart = temp is not None
if self.mHasStart:
self.mStart = temp
# Get DTEND
temp = self.loadValueDateTime(definitions.cICalProperty_DTEND)
if temp is None:
# Try DURATION instead
temp = self.loadValueDuration(definitions.cICalProperty_DURATION)
if temp is not None:
self.mEnd = self.mStart + temp
self.mDuration = True
else:
# Force end to start, which will then be fixed to sensible
# value later
self.mEnd = self.mStart
else:
self.mHasEnd = True
self.mDuration = False
self.mEnd = temp
def fixStartEnd(self):
# End is always greater than start if start exists
if self.mHasStart and self.mEnd <= self.mStart:
# Use the start
self.mEnd = self.mStart.duplicate()
self.mDuration = False
# Adjust to appropiate non-inclusive end point
if self.mStart.isDateOnly():
self.mEnd.offsetDay(1)
# For all day events it makes sense to use duration
self.mDuration = True
else:
# Use end of current day
self.mEnd.offsetDay(1)
self.mEnd.setHHMMSS(0, 0, 0)
def getStart(self):
return self.mStart
#.........这里部分代码省略.........