# opDate - date/time manipulation routines
# Some ideas came from Turbo Professional/Object Professional (t/o)pDate.PAS
#
-# Written by Broytman, Nov 1997 - Dec 2003
-# Copyright (C) 1997-2003 PhiloSoft Design
-#
+from __future__ import print_function
from string import *
from time import *
from calendar import *
#
def IsLeapYear(Year):
- if ( (Year % 4 == 0) and (Year % 4000 <> 0) and ((Year % 100 <> 0) or (Year % 400 == 0)) ):
+ if ( (Year % 4 == 0) and (Year % 4000 != 0) and ((Year % 100 != 0) or (Year % 400 == 0)) ):
return True
return False
return 28+IsLeapYear(_setYear(Year))
else:
- raise opdate_error, "bad month `%s'" % str(Month)
+ raise opdate_error("bad month `%s'" % str(Month))
def ValidDate(Day, Month, Year):
Year = Year - 1
Year = Year - MinYear
- return (((Year / 100)*146097) / 4) + (((Year % 100)*1461) / 4) + (((153*Month)+2) / 5)+Day+First2Months
+ return (((Year // 100)*146097) // 4) + (((Year % 100)*1461) // 4) + (((153*Month)+2) // 5)+Day+First2Months
def DateToDMY(Julian):
Day = Julian-30
else:
I = (4*(Julian-First2Months))-1
- J = (4*((I % 146097) / 4))+3
- Year = (100*(I / 146097))+(J / 1461)
- I = (5*(((J % 1461)+4) / 4))-3
- Month = I / 153
- Day = ((I % 153)+5) / 5
+ J = (4*((I % 146097) // 4))+3
+ Year = (100*(I // 146097))+(J // 1461)
+ I = (5*(((J % 1461)+4) // 4))-3
+ Month = I // 153
+ Day = ((I % 153)+5) // 5
if Month < 10:
Month = Month + 3
else:
Day = 28
Year = Year + Years
- Year = Year + Months / 12
+ Year = Year + Months // 12
Month = Month + Months % 12
if Month < 1:
Month = Month + 12
Year = Year + 1
Julian = DMYtoDate(Day, Month, Year)
- if Julian <> BadDate:
+ if Julian != BadDate:
Julian = Julian + Days + Day28Delta
return Julian
Day = 28
Year = Year + Years
- Year = Year + Months / 12
+ Year = Year + Months // 12
Month = Month + Months % 12
if Month < 1:
Month = Month + 12
Year = Year + 1
Julian = DMYtoDate(Day, Month, Year)
- if Julian <> BadDate:
+ if Julian != BadDate:
MaxDay = DaysInMonth(Month, Year)
if Day+Day28Delta > MaxDay:
Julian = Julian + MaxDay-Day
def DayOfWeek(Julian):
""" Return the day of the week for the date. Returns DayType(7) if Julian == BadDate. """
if Julian == BadDate:
- raise opdate_error, "bad date `%s'" % str(Julian)
+ raise opdate_error("bad date `%s'" % str(Julian))
else:
return (Julian+FirstDayOfWeek) % 7
return 0, 0, 0
else:
- Hours = T / SecondsInHour
+ Hours = T // SecondsInHour
T = T - Hours*SecondsInHour
- Minutes = T / SecondsInMinute
+ Minutes = T // SecondsInMinute
T = T - Minutes*SecondsInMinute
Seconds = T
Seconds = 0
if not Truncate:
- if Minutes >= (MinutesInHour / 2):
+ if Minutes >= (MinutesInHour // 2):
Hours = Hours + 1
Minutes = 0
Hours, Minutes, Seconds = TimeToHMS(T)
if not Truncate:
- if Seconds >= (SecondsInMinute / 2):
+ if Seconds >= (SecondsInMinute // 2):
Minutes = Minutes + 1
Seconds = 0
Secs = -Secs
# adjust the date
- DT2[0] = DT2[0] - Secs / SecondsInDay
+ DT2[0] = DT2[0] - Secs // SecondsInDay
Secs = Secs % SecondsInDay
if Secs > DT2[1]:
DT2[1] = DT2[1] + Secs
# adjust date if necessary
- DT2[0] = DT2[0] + DT2[1] / SecondsInDay
+ DT2[0] = DT2[0] + DT2[1] // SecondsInDay
# force time to 0..SecondsInDay-1 range
DT2[1] = DT2[1] % SecondsInDay
#
def test():
- print "Is 1984 leap year?", IsLeapYear(1984)
- print "Is 1990 leap year?", IsLeapYear(1990)
+ print("Is 1984 leap year?", IsLeapYear(1984))
+ print("Is 1990 leap year?", IsLeapYear(1990))
- print "Days in month 8 year 1996:", DaysInMonth(8, 1996)
+ print("Days in month 8 year 1996:", DaysInMonth(8, 1996))
- print "Is date 8/12/1996 valid?", ValidDate(8, 12, 1996)
- print "Is date 40/11/1996 valid?", ValidDate(40, 11, 1996)
- print "Is date 8/14/1996 valid?", ValidDate(8, 14, 1996)
+ print("Is date 8/12/1996 valid?", ValidDate(8, 12, 1996))
+ print("Is date 40/11/1996 valid?", ValidDate(40, 11, 1996))
+ print("Is date 8/14/1996 valid?", ValidDate(8, 14, 1996))
- print "Date->DMY for 138219:", DateToDMY(138219)
+ print("Date->DMY for 138219:", DateToDMY(138219))
diff = DateDiff(DMYtoDate(12, 10, 1996), DMYtoDate(12, 10, 1997))
- print "Date 12/10/1996 and date 12/10/1997 diff: %d years, %d months, %d days" % (diff[2], diff[1], diff[0])
+ print("Date 12/10/1996 and date 12/10/1997 diff: %d years, %d months, %d days" % (diff[2], diff[1], diff[0]))
diff = DateDiff(DMYtoDate(12, 10, 1996), DMYtoDate(12, 11, 1997))
- print "Date 12/10/1996 and date 12/11/1997 diff: %d years, %d months, %d days" % (diff[2], diff[1], diff[0])
+ print("Date 12/10/1996 and date 12/11/1997 diff: %d years, %d months, %d days" % (diff[2], diff[1], diff[0]))
diff = DateDiff(DMYtoDate(31, 1, 1996), DMYtoDate(1, 3, 1996))
- print "Date 31/01/1996 and date 01/03/1996 diff: %d years, %d months, %d days" % (diff[2], diff[1], diff[0])
+ print("Date 31/01/1996 and date 01/03/1996 diff: %d years, %d months, %d days" % (diff[2], diff[1], diff[0]))
- #print "November is %dth month" % MonthStringToMonth("November")
+ #print("November is %dth month" % MonthStringToMonth("November"))
- print "Today is", Today()
- print "Now is", CurrentTime()
+ print("Today is", Today())
+ print("Now is", CurrentTime())
- print "My birthday 21 Dec 1967 is (must be Thursday):", day_name[DayOfWeekDMY(21, 12, 67)]
+ print("My birthday 21 Dec 1967 is (must be Thursday):", day_name[DayOfWeekDMY(21, 12, 67)])
gmt = DateTimeToGMT(DMYtoDate(21, 12, 1967), HMStoTime(23, 45, 0))
- print "21 Dec 1967, 23:45:00 --", gmtime(gmt) # DOS version of gmtime has error processing dates before 1/1/1970 :(
+ # DOS version of gmtime has error processing dates before 1/1/1970 :(
+ print("21 Dec 1967, 23:45:00 --", gmtime(gmt))
D, T = GMTtoDateTime(gmt)
- print "(gmt) --", DateToDMY(D), TimeToHMS(T)
+ print("(gmt) --", DateToDMY(D), TimeToHMS(T))
if __name__ == "__main__":
test()