def showTimeFrame(self,obj): s = DateTime(obj.getValue('start-date')) e = DateTime(obj.getValue('end-date')) if s.year() == e.year() and s.month() == e.month() and \ s.day() == e.day() and s.hour() == e.hour() and s.minute() == e.minute(): return False return True
def results(self, start, until=None): today = DateTime() today = DateTime(today.year(), today.month(), today.day()) start = DateTime(start) start = DateTime(start.year(), start.month(), start.day()) query = Indexed('chimpfeeds') & \ In('review_state', ('published', )) & \ Ge('feedSchedule', start) if until: try: until = DateTime(until) except DateTime.SyntaxError: pass else: query = query & Le('feedSchedule', until) site = getToolByName(self.context, "portal_url").getPortalObject() settings = IFeedSettings(site) if settings.use_moderation: query = query & Eq('feedModerate', True) catalog = getToolByName(self.context, "portal_catalog") extras = [] utilities = getUtilitiesFor(IGroupExtras) groups = InterestGroupVocabulary()(self.context) for name, util in utilities: for group in groups: extras.extend(util.items(group.title, start, until)) return list(catalog.evalAdvancedQuery( query, (('feedSchedule', 'desc'), ))) + extras
def showTimeFrame(self, obj): s = DateTime(obj.getValue('start-date')) e = DateTime(obj.getValue('end-date')) if s.year() == e.year() and s.month() == e.month() and \ s.day() == e.day() and s.hour() == e.hour() and s.minute() == e.minute(): return False return True
def getDateRangeFromDate(self, start_date, end_date=None): """Returns tuple of DateTime. Compute this tuple from dates.""" if end_date is None: end_date = start_date start_date = DateTime(start_date.year(), start_date.month(), start_date.day(), 0, 0, 0) # Finished at 23:59:59 end_date = DateTime(end_date.year(), end_date.month(), end_date.day(), 23, 59, 59) return (start_date, end_date)
def _getNextDay(self, date, timezone): if timezone is not None: new_date = DateTime(date.timeTime() + 86400.0, timezone) else: new_date = DateTime(date.timeTime() + 86400.0) # Due to daylight savings, 24 hours later does not always mean that # it's next day. while new_date.day() == date.day(): if timezone is not None: new_date = DateTime(new_date.timeTime() + 3600.0, timezone) else: new_date = DateTime(new_date.timeTime() + 3600.0) return DateTime(new_date.year(), new_date.month(), new_date.day(), 0, 0, 0, timezone)
def post_validate(self, REQUEST=None, errors=None): """Validates start and end date End date must be after start date """ if 'startDate' in errors or 'endDate' in errors: # No point in validating bad input return rstartDate = REQUEST.get('startDate', None) rendDate = REQUEST.get('endDate', None) if rstartDate: try: start = DateTime(rstartDate) except: errors['startDate'] = _(u'error_invalid_start_date', default=u'Start date is not valid.') # set end > start # TODO: add duration selection endHour = start.h_24() endMinute = start.minute() + config.DURATION while endMinute > 59: endHour = endHour+1 endMinute = endMinute-60 if endHour > 23: endHour = 23 endMinute = 55 end = DateTime(start.year(),start.month(),start.day(),endHour,endMinute) self.getField('endDate').set(self, end)
def post_validate(self, REQUEST=None, errors=None): """Validates start and end date End date must be after start date """ if 'startDate' in errors or 'endDate' in errors: # No point in validating bad input return rstartDate = REQUEST.get('startDate', None) rendDate = REQUEST.get('endDate', None) if rstartDate: try: start = DateTime(rstartDate) except: errors['startDate'] = _(u'error_invalid_start_date', default=u'Start date is not valid.') # set end > start # TODO: add duration selection endHour = start.h_24() endMinute = start.minute() + config.DURATION while endMinute > 59: endHour = endHour + 1 endMinute = endMinute - 60 if endHour > 23: endHour = 23 endMinute = 55 end = DateTime(start.year(), start.month(), start.day(), endHour, endMinute) self.getField('endDate').set(self, end)
def now_no_seconds(self): """ return current date and time with the seconds truncated """ now = DateTime() return DateTime(str(now.year())+'/'+str(now.month())+'/'+\ str(now.day())+' '+str(now.hour())+':'+str(now.minute())+' '+\ str(now.timezone()))
def getMilestoneInfo(self, m): now = DateTime() today = DateTime(now.year(), now.month(), now.day()) delaytime = today - m.end - 1 delaydays = int(delaytime) + 1 description = m.Description state = '' if m.review_state == 'active' and delaytime < 0: #state = '待办' state = translate(_(u'state_active', default='Active'), context=self.request) elif m.review_state == 'completed': #state = '完成' state = translate(_(u'state_completed', default='Completed'), context=self.request) else: #state = '滞后' state = translate(_(u'state_late', default='Late'), context=self.request) #description = '(滞后' + str(delaydays) + '天)' + description description = translate(_( u'milestone_description', default='(Late ${delaydays} days) ${description}', mapping={ u'delaydays': str(delaydays), u'description': description }), context=self.request) return (state, description)
def testEDTTimezone(self): # should be able to parse EDT timezones: see lp:599856. dt = DateTime("Mon, 28 Jun 2010 10:12:25 EDT") self.assertEqual(dt.Day(), 'Monday') self.assertEqual(dt.day(), 28) self.assertEqual(dt.Month(), 'June') self.assertEqual(dt.timezone(), 'GMT-4')
def purge_now(self): last_purge = self.last_purge() now = DateTime() if (not last_purge) or now - last_purge > 1 or now.day() != last_purge.day(): return True else: return False
def render_view(self, field, value): if value is None: return '' use_ampm = field.get_value('ampm_time_style') if not isinstance(value, DateTime): value = DateTime(value) year = "%04d" % value.year() month = "%02d" % value.month() day = "%02d" % value.day() if use_ampm: hour = "%02d" % value.h_12() else: hour = "%02d" % value.hour() minute = "%02d" % value.minute() ampm = value.ampm() order = field.get_value('input_order') if order == 'ymd': output = [year, month, day] elif order == 'dmy': output = [day, month, year] elif order == 'mdy': output = [month, day, year] date_result = string.join(output, field.get_value('date_separator')) if not field.get_value('date_only'): time_result = hour + field.get_value('time_separator') + minute if use_ampm: time_result += ' ' + ampm return date_result + ' ' + time_result else: return date_result
def _calculate_two_weeks(): two_weeks = [[None] * 7, [None] * 7] brains = portal_catalog.searchResults( {'path' : path, 'portal_type': 'Milestone', 'end': {"query": [today, today+14], "range": "minmax"}, }, ) _upcoming = {} for b in brains: end = b.end end = DateTime(end.year(), end.month(), end.day()) _upcoming.setdefault(end, []).append(b) day = today for i in range(2): for j in range(7): two_weeks[i][j] = {} two_weeks[i][j]["day"] = day.day() if _upcoming.has_key(day): two_weeks[i][j]["its"] = _upcoming[day] day += 1 nextday = today+1 two_weeks[0][0]["day"] = "TODAY" two_weeks[0][0]["is_today"] = True two_weeks[0][1]["day"] = "%s %d" % (nextday.aMonth(), nextday.day()) return two_weeks
def _getNextMinute(self, date, timezone): if timezone is not None: new_date = DateTime(date.timeTime() + 60.0, timezone) else: new_date = DateTime(date.timeTime() + 60.0) return DateTime(new_date.year(), new_date.month(), new_date.day(), new_date.hour(), new_date.minute(), 0, timezone)
def testEDTTimezone(self): """Should be able to parse EDT timezones""" dt = DateTime("Mon, 28 Jun 2010 10:12:25 EDT") self.assertEqual(dt.Day(), 'Monday') self.assertEqual(dt.day(), 28) self.assertEqual(dt.Month(), 'June') self.assertEqual(dt.timezone(), 'GMT-0400')
def _dt_setter(self, fieldtoset, value, **kwargs): # Always set the date in UTC, saving the timezone in another field. # But since the timezone value isn't known at the time of saving the # form, we have to save it timezone-naive first and let # timezone_handler convert it to the target zone afterwards. # Note: The name of the first parameter shouldn't be field, because # it's already in kwargs in some case. if not isinstance(value, DateTime): value = DateTime(value) # Get microseconds from seconds, which is a floating value. Round it # up, to bypass precision errors. micro = int(round(value.second()%1 * 1000000)) value = DateTime('%04d-%02d-%02dT%02d:%02d:%02d%sZ' % ( value.year(), value.month(), value.day(), value.hour(), value.minute(), value.second(), micro and '.%s' % micro or '' ) ) self.getField(fieldtoset).set(self, value, **kwargs)
def specialActivities(self): sactivities = [] ftoday = DateTime() today = DateTime('/'.join([str(ftoday.year()), str(ftoday.month()), str(ftoday.day())])) start_date = today end_date = today + 0.9 folderS = getSite().unrestrictedTraverse('actividades/actividades-especiales') brainscuerS = {'Cuernavaca': self.criteriaActivities(start_date, end_date, ['/'.join(folderS.getPhysicalPath())+'/cuernavaca'])} brainsjurS = {'Juriquilla': self.criteriaActivities(start_date, end_date, ['/'.join(folderS.getPhysicalPath())+'/juriquilla'])} brainsoaxS = {'Oaxaca': self.criteriaActivities(start_date, end_date, ['/'.join(folderS.getPhysicalPath())+'/oaxaca'])} for items in [brainscuerS, brainsjurS, brainsoaxS]: campus = items.keys()[0] brains = items[campus] for item in brains: data = {} data['startf'] = self.date_speller(item.start) data['date'] = item.start data['expositor'] = item.getSpeaker data['title'] = item.pretty_title_or_id() data['location'] = item.location data['hour'] = str(data['startf']['hour']) + ':' + str(data['startf']['minute']) + ' hrs.' value = '' if item.Subject: value = item.Subject[0] data['seminarytitle'] = value data['campus'] = campus sactivities.append(data) return sactivities
def testRFC822(self): # rfc822 conversion dt = DateTime('2002-05-02T08:00:00+00:00') self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 +0000') dt = DateTime('2002-05-02T08:00:00+02:00') self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 +0200') dt = DateTime('2002-05-02T08:00:00-02:00') self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 -0200') # Checking that conversion from local time is working. dt = DateTime() dts = dt.rfc822().split(' ') times = dts[4].split(':') _isDST = time.localtime(time.time())[8] if _isDST: offset = time.altzone else: offset = time.timezone self.assertEqual(dts[0], dt.aDay() + ',') self.assertEqual(int(dts[1]), dt.day()) self.assertEqual(dts[2], dt.aMonth()) self.assertEqual(int(dts[3]), dt.year()) self.assertEqual(int(times[0]), dt.h_24()) self.assertEqual(int(times[1]), dt.minute()) self.assertEqual(int(times[2]), int(dt.second())) self.assertEqual(dts[5], "%+03d%02d" % divmod((-offset / 60), 60))
def tvActivities(self): ftoday = DateTime() today = DateTime('/'.join([str(ftoday.year()), str(ftoday.month()), str(ftoday.day())])) start_date = today end_date = today + 0.9 foldercu = self.pathcu() brainscu = self.criteriaActivities(start_date, end_date, foldercu) folderjur = self.pathjur() brainsjur = self.criteriaActivities(start_date, end_date, folderjur) iso_start = start_date.ISO().split('-') day_start = iso_start[2].split('T') iso_end = end_date.ISO().split('-') day_end = iso_end[2].split('T') return { 'brainscu': brainscu, 'start_date': '/'.join([day_start[0], iso_start[1], iso_start[0]]), 'end_date': '/'.join([day_end[0], iso_end[1], iso_end[0]]), 'matcuerrss': self.semanaryRSS(self.matcuerfeed, start_date, end_date), 'oaxrss': self.semanaryRSS(self.oaxfeed, start_date, end_date), 'brainsjur': brainsjur, }
def testConstructor7(self): """Constructor from parts""" dt = DateTime() dt1 = DateTime(dt.year(), dt.month(), dt.day(), dt.hour(), dt.minute(), dt.second(), dt.timezone()) # Compare representations as it's the # only way to compare the dates to the same accuracy self.assertEqual(repr(dt), repr(dt1))
def testSubtraction(self): """Reconstruction of a DateTime from its parts, with subtraction""" dt = DateTime() dt1 = dt - 3.141592653 dt2 = DateTime(dt.year(), dt.month(), dt.day(), dt.hour(), dt.minute(), dt.second()) dt3 = dt2 - 3.141592653 self.assertEqual(dt1, dt3, (dt, dt1, dt2, dt3))
def render_hidden(self, field, key, value, REQUEST): result = [] if value is None and field.get_value('default_now'): value = DateTime() sub_values = {} subfields = ['year','month','day'] if value is not None: if not isinstance(value, DateTime): value = DateTime(value) sub_values['year'] = '%04d' % value.year() sub_values['month'] = "%02d" % value.month() sub_values['day'] = "%02d" % value.day() if not field.get_value('date_only'): use_ampm = field.get_value('ampm_time_style') subfields.extend(['hour','minute']) if use_ampm: subfields.append('ampm') if value is not None: if use_ampm: sub_values['hour'] = "%02d" % value.h_12() sub_values['ampm'] = value.ampm() else: sub_values['hour'] = "%02d" % value.hour() sub_values['minute'] = "%02d" % value.minute() for subfield in subfields: # XXX it would be nicer to pass the hidden value somewhere # to the subfields, but ... sub_key = field.generate_subfield_key(subfield) sub_field = field.sub_form.get_field(subfield) result.append(sub_field.widget.render_hidden(sub_field, sub_key, sub_values.get(subfield), REQUEST)) return ''.join(result)
def getDateRangeFromWeek(self, start_week, start_year, end_week=None, end_year=None): """Returns tuple of DateTime. Compute this tuple from weeks. A week begins monday and ends sunday. """ if end_week is None: end_week = start_week if end_year is None: end_year = start_year # Get first day of start year date_first_day = DateTime(start_year, 1, 1) day_minus = (date_first_day.dow() - 1) % 7 day_plus = 0 start_day = (start_week * 7) - 6 - day_minus start_date = DateTime(start_year, start_day) if start_date.week() != start_week: day_plus = 7 start_date = start_date + day_plus # Get first day of end year date_first_day = DateTime(end_year, 1, 1) day_minus = (date_first_day.dow() - 1) % 7 end_day = (end_week * 7) - day_minus + day_plus end_date = DateTime(end_year, end_day) # Finished at 23:59:59 end_date = DateTime(end_date.year(), end_date.month(), end_date.day(), 23, 59, 59) return (start_date, end_date)
def getChoices(self): """ Returns the appropriate date range choices. """ today = datetime.date.today() timedelta = datetime.timedelta mtd_days = today.day - 1 ytd_days = today.timetuple().tm_yday - 1 date_ranges = { 'week': [today - timedelta(days=6), today], 'month': [today - timedelta(days=29), today], 'quarter': [today - timedelta(days=89), today], 'year': [today - timedelta(days=364), today], 'mdt': [today - timedelta(days=mtd_days), today], 'ytd': [today - timedelta(days=ytd_days), today], } if hasattr(self.context, 'Date') and self.context.Date() is not 'None': pub_dt = DateTime(self.context.Date()) published_date = datetime.date( pub_dt.year(), pub_dt.month(), pub_dt.day()) date_ranges.update({ 'published': [published_date, today], }) return date_ranges
def update(self): catalog_tool = getToolByName(self.context, 'portal_catalog') portal_path = getToolByName(self.context, 'portal_url').getPortalPath() path = '/'.join(self.context.getPhysicalPath()) # at portal, so we show only active projects if portal_path == path: pv = getMultiAdapter( (self.context, self.request), name=u'projectview') path = pv.getActiveProjectPaths() now = DateTime() self.today = DateTime(now.year(), now.month(), now.day()) self.NameDays = [] day = self.today for i in range(7): self.NameDays.append(day.aDay()) day += 1 query1 ={ 'portal_type' : 'Milestone', 'end' : {"query":[self.today-1], "range":"max"}, 'review_state': 'active', 'path': path, } self.late_milestones = catalog_tool.searchResults( query1, sort_on='end', ) query2 ={ 'portal_type' : 'Milestone', 'review_state': 'active', 'end' : {"query":[self.today, self.today+14], "range":"minmax"}, 'path': path, } brains = catalog_tool.searchResults( query2, sort_on='end', ) self.next_14_days_cal = [[None] * 7, [None] * 7] self.next_14_days_milestones = {} day = self.today for i in range(2): for j in range(7): self.next_14_days_cal[i][j] = day.day() day += 1 self.next_14_days_cal[0][0] = "TODAY" day = self.today + 1 self.next_14_days_cal[0][1] = "%s %s" % (day.aMonth(), day.day()) for b in brains: diff = int(b.end - self.today) weekno = diff / 7 if weekno > 1: continue self.next_14_days_milestones.setdefault(weekno, {}).setdefault(diff % 7, []).append(b)
def do_email_reminder(self): prop = getToolByName(self.context,'portal_properties').groupfinder_properties bool_email = prop.getProperty('email_reminder') str_date = prop.getProperty('email_reminder_executed_on') dt = DateTime(str_date) if DateTime().day() != dt.day() and bool_email: return True return False
def do_email_reminder(self): prop = getToolByName(self.context, 'portal_properties').groupfinder_properties bool_email = prop.getProperty('email_reminder') str_date = prop.getProperty('email_reminder_executed_on') dt = DateTime(str_date) if DateTime().day() != dt.day() and bool_email: return True return False
def update(self): super(HeaderTimeViewlet, self).update() date = DateTime() self.day = date.day() self.month = _pl(monthname_msgid(int(date.strftime('%m'))), default=safe_unicode(date.Month())) self.dayname = _pl(weekdayname_msgid(int(date.strftime('%w'))), default=safe_unicode(date.DayOfWeek())) self.datetime = self.toLocalizedTime(date, long_format=True)
def getAge(self): """age""" birth = self.getPersonal_birthdate() if birth is None: return "" now = DateTime() year = now.year() - birth.year() if now.month() < birth.month() or (now.month() == birth.month() and now.day() < birth.day()): year = year -1 return str(year)+" años"
def get3monthsMilestones(self): now = DateTime() start_year, start_month, today = now.year(), now.month(), now.day() end_year = start_year + (start_month + 3 - 1) / 12 end_month = (start_month + 3 - 1) % 12 + 1 start_date = DateTime(start_year, start_month, 1) end_date = DateTime(end_year, end_month, 1) ctool = getToolByName(self.context, 'portal_catalog') #active_projects = ctool(portal_type='Project', review_state='active') #paths = [p.getPath() for p in active_projects] pv = getMultiAdapter((self.context, self.request), name=u'projectview') paths = pv.getActiveProjectPaths() query = { 'path': paths, 'portal_type': 'Milestone', 'review_state': 'active', 'end': { "query": [start_date, end_date], "range": "minmax" }, } responsibleParty = self.request.get('responsibleParty', '') if responsibleParty: query['getResponsibleParty'] = responsibleParty brains = ctool.searchResults(query) milestones = {} for b in brains: end = b.end month, day = end.month(), end.day() if not milestones.has_key(month): milestones[month] = {} if not milestones[month].has_key(day): milestones[month][day] = {'name': day, 'milestones': [b]} else: milestones[month][day]['milestones'].append(b) if not start_month in milestones: milestones[start_month] = {} if not today in milestones[start_month]: milestones[start_month][today] = { 'name': 'TODAY', 'milestones': [] } else: milestones[start_month][today]['name'] = 'TODAY' return milestones
def getAntiquity(self): """antiquity""" antiquit = self.getCompany_employee_startdate() if antiquit is None: return "" now = DateTime() year = now.year() - antiquit.year() if now.month() < antiquit.month() or (now.month() == antiquit.month() and now.day() < antiquit.day()): year = year -1 return str(year)+" años"
def stepCheckBasic(self, sequence = None, sequence_list = None, **kw): basic = sequence.get('basic') self.assertEqual(len(basic.report_group_list), 1) lane_tree_list = basic.buildLaneTreeList() sec_axis_info = basic.getLaneAxisInfo(lane_tree_list) date = DateTime() today = DateTime('%s/%s/%s' % (date.year(),date.month(),date.day())) self.assertEqual(sec_axis_info['bound_start'], today) self.assertEqual(sec_axis_info['bound_stop'], today+1) for tree_list, activity_list,stat in basic.report_group_list: self.assertEqual(len(activity_list), 1)
def test_iteration_start_default(self): """ Test that the iteration's start date is set to current date by default """ self.setRoles(['Projectmanager']) self.folder.invokeFactory('Project', id='proj') self.folder.proj.invokeFactory('Iteration', id='it') it = self.folder.proj.it ct = DateTime() self.failUnless(it.startDate.year() == ct.year()) self.failUnless(it.startDate.month() == ct.month()) self.failUnless(it.startDate.day() == ct.day())
def getAge(self): """Return the age of the team member.""" birthdate = self.context.getBirthdate() if birthdate is None: return None today = DateTime() age = today.year() - birthdate.year() # Apply correction when before birthday. if (today.month() < birthdate.month() or (today.month() == birthdate.month() and today.day() < birthdate.day())): age = age - 1 return age
def generate_date(self, datetimestring, now=None): if now is None: now = datetime.datetime.now() today = now.day yesterday = (now - datetime.timedelta(1)).day this_month = now.month this_year = now.year modified = DateTime(datetimestring) if modified.month() == this_month and modified.year() == this_year: if modified.day() == today: return _(u'label_today', default=u'Today, ${time}', mapping={'time': modified.strftime('%H:%M')}) elif modified.day() == yesterday: return _(u'label_yesterday', u'Yesterday, ${time}', mapping={'time': modified.strftime('%H:%M')}) else: return modified.strftime('%d.%m.%Y') else: return modified.strftime('%d.%m.%Y')