datetime.py :  » Ajax » pyjamas » src » pyjs » src » pyjs » lib » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Ajax » pyjamas 
pyjamas » src » pyjs » src » pyjs » lib » datetime.py
from __pyjamas__ import JS

from time import __c__days,__c__months,strftime,localtime,gmtime

MINYEAR = 1
MAXYEAR = 1000000


class date:
    def __init__(self, year, month, day, d=None):
        if d is None:
            d = JS("""new Date(year, month - 1, day, 0, 0, 0, 0)""")
        self._d = d
        self.year = d.getFullYear()
        self.month = d.getMonth() + 1.0
        self.day = d.getDate()
    
    @classmethod
    def today(self):
        return date(d=JS("""new Date()"""))
    
    @classmethod
    def fromtimestamp(self, timestamp):
        d = JS("""new Date()""")
        d.setTime(timestamp * 1000.0)
        return date(d=d)
    
    @classmethod
    def fromordinal(self, ordinal):
        d = JS("""new Date()""")
        d.setTime((ordinal - 719163.0) * 86400000.0)
        return date(d=d)
    
    def ctime(self):
        return "%s %s %2d %02d:%02d:%02d %04d" % (__c__days[self._d.getDay()][:3], __c__months[self._d.getMonth()][:3], self._d.getDate(), self._d.getHours(), self._d.getMinutes(), self._d.getSeconds(), self._d.getFullYear())
    
    def isocalendar(self):
        isoyear = isoweeknr = isoweekday = None
        JS("""
            var gregdaynumber = function(year, month, day) {
                var y = year;
                var m = month;
                if (month < 3) {
                    y--;
                    m += 12;
                }
                return Math.floor(365.25 * y) - Math.floor(y / 100) + Math.floor(y / 400) + Math.floor(30.6 * (m + 1)) + day - 62;
            };
            
            var year = this._d.getFullYear();
            var month = this._d.getMonth();
            var day = this._d.getDate();
            var wday = this._d.getDay();
            
            isoweekday = ((wday + 6) % 7) + 1;
            isoyear = year;

            var d0 = gregdaynumber(year, 1, 0);
            var weekday0 = ((d0 + 4) % 7) + 1;

            var d = gregdaynumber(year, month + 1, day);
            isoweeknr = Math.floor((d - d0 + weekday0 + 6) / 7) - Math.floor((weekday0 + 3) / 7);

            if ((month == 11) && ((day - isoweekday) > 27)) {
                isoweeknr = 1;
                isoyear = isoyear + 1;
            }

            if ((month == 0) && ((isoweekday - day) > 3)) {
                d0 = gregdaynumber(year - 1, 1, 0);
                weekday0 = ((d0 + 4) % 7) + 1;
                isoweeknr = Math.floor((d - d0 + weekday0 + 6) / 7) - Math.floor((weekday0 + 3) / 7);
                isoyear--;
            }
        """)
        return (isoyear, isoweeknr, isoweekday)
    
    def isoformat(self):
        return "%04d-%02d-%02d" % (self.year, self.month, self.day)
    
    def isoweekday(self):
        return ((self._d.getDay() + 6) % 7) + 1
    
    def replace(self, year=None, month=None, day=None):
        if year is None:
            year = self.year
        if month is None:
            month = self.month
        if day is None:
            day = self.day
        return date(year, month, day)
    
    def strftime(self, format):
        return strftime(format, self.timetuple())
    
    def timetuple(self):
        tm = localtime(int(self._d.getTime() / 1000.0))
        tm.tm_hour = tm.tm_min = tm.tm_sec = 0
        return tm
    
    def toordinal(self):
        return int(self._d.getTime() / 86400000.0) + 719163
    
    def weekday(self):
        return (self._d.getDay() + 6) % 7

    def __str__(self):
        return self.isoformat()

    def __cmp__(self, other):
        if isinstance(other, date) or isinstance(other, datetime):
            a = self._d.getTime()
            b = other._d.getTime()
            if a < b:
                return -1
            elif a == b:
                return 0
        else:
            raise TypeError("expected date or datetime object")
        return 1
    
    def __add__(self, other):
        if isinstance(other, timedelta):
            return date(self.year, self.month, self.day + other.days)
        else:
            raise TypeError("expected timedelta object")
    
    def __sub__(self, other):
        if isinstance(other, date) or isinstance(other, datetime):
            diff = self._d.getTime() - other._d.getTime()
            return timedelta(int(diff / 86400000.0), int(diff / 1000.0) % 86400, milliseconds=(diff % 86400000))
        elif isinstance(other, timedelta):
            return date(self.year, self.month, self.day - other.days)
        else:
            raise TypeError("expected date or datetime object")


class time:
    def __init__(self, hour, minute=0, second=0, microsecond=0, tzinfo=None, d=None):
        if tzinfo != None:
            raise NontImplementedError("tzinfo")
        if d is None:
            d = JS("""new Date(1970, 1, 1, hour, minute, second, 0.5 + microsecond / 1000.0)""")
        self._d = d
        self.hour = d.getHours()
        self.minute = d.getMinutes()
        self.second = d.getSeconds()
        self.microsecond = d.getMilliseconds() * 1000.0
        self.tzinfo = None
        
    def dst(self):
        raise NontImplementedError("dst")
    
    def isoformat(self):
        t = "%02d:%02d:%02d" % (self.hour, self.minute, self.second)
        if self.microsecond:
            t += ".%06d" % self.microsecond
        return t
    
    def replace(self, hour=None, minute=None, second=None, microsecond=None, tzinfo=None):
        if tzinfo != None:
            raise NontImplementedError("tzinfo")
        if hour is None:
            hour = self.hour
        if minute is None:
            minute = self.minute
        if second is None:
            second = self.second
        if microsecond is None:
            microsecond = self.microsecond
        return time(hour, minute, second, microsecond)
    
    def strftime(self, format):
        return strftime(format, localtime(int(self._d.getTime() / 1000.0)))
    
    def tzname(self):
        return None
    
    def utcoffset(self):
        return None

    def __str__(self):
        return self.isoformat()


class datetime(date, time):
    def __init__(self, year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, d=None):
        if d is None:
            d = JS("""new Date(year, month - 1, day, hour, minute, second, 0.5 + microsecond / 1000.0)""")
        date.__init__(self, d=d)
        time.__init__(self, d=d)
    
    @classmethod
    def combine(self, date, time):
        return datetime(date.year, date.month, date.day, time.hour, time.minute, time.second, time.microsecond)
    
    @classmethod
    def fromtimestamp(self, timestamp, tz=None):
        if tz != None:
            raise NontImplementedError("tz")
        d = JS("""new Date()""")
        d.setTime(timestamp * 1000.0)
        return datetime(d=d)
    
    @classmethod
    def fromordinal(self, ordinal):
        d = JS("""new Date()""")
        d.setTime((ordinal - 719163.0) * 86400000.0)
        return datetime(d=d)
    
    @classmethod
    def now(self, tz=None):
        if tz != None:
            raise NontImplementedError("tz")
        return datetime(d=JS("""new Date()"""))
    
    @classmethod
    def strptime(self, datestring, format):
        raise NontImplementedError("strptime")
    
    @classmethod
    def utcfromtimestamp(self, timestamp):
        tm = gmtime(timestamp)
        return datetime(tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec)
    
    @classmethod
    def utcnow(self):
        d = JS("""new Date()""")
        return datetime.utcfromtimestamp(int(d.getTime() / 1000.0))
    
    def timetuple(self):
        return localtime(int(self._d.getTime() / 1000.0))
    
    def astimezone(self, tz):
        raise NontImplementedError("astimezone")
    
    def date(self):
        return date(self.year, self.month, self.day)
    
    def time(self):
        return time(self.hour, self.minute, self.second, self.microsecond)
    
    def replace(self, year=None, month=None, day=None, hour=None, minute=None, second=None, microsecond=None, tzinfo=None):
        if tzinfo != None:
            raise NontImplementedError("tzinfo")
        if year is None:
            year = self.year
        if month is None:
            month = self.month
        if day is None:
            day = self.day
        if hour is None:
            hour = self.hour
        if minute is None:
            minute = self.minute
        if second is None:
            second = self.second
        if microsecond is None:
            microsecond = self.microsecond
        return datetime(year, month, day, hour, minute, second, microsecond)
    
    def timetz(self):
        raise NontImplementedError("timetz")
    
    def utctimetuple(self):
        return gmtime(self._d.getTime() / 1000.0)
    
    def isoformat(self, sep='T'):
        t = "%04d-%02d-%02d%s%02d:%02d:%02d" % (self.year, self.month, self.day, sep, self.hour, self.minute, self.second)
        if self.microsecond:
            t += ".%06d" % self.microsecond
        return t

    def __add__(self, other):
        if isinstance(other, timedelta):
            d = JS("""new Date(this.year, this.month, this.day + other.days, this.hour + (other.seconds / 3600.0), this.minute + ((other.seconds / 60.0) % 60), this.second + (other.seconds % 60), this.microsecond + other.microseconds)""")
            return datetime(d=d)
        else:
            raise TypeError("expected timedelta object")

    def __sub__(self, other):
        if isinstance(other, date) or isinstance(other, datetime):
            diff = self._d.getTime() - other._d.getTime()
            return timedelta(int(diff / 86400000.0), int(diff / 1000.0) % 86400, milliseconds=(diff % 86400000))
        elif isinstance(other, timedelta):
            d = JS("""new Date(this.year, this.month, this.day - other.days, this.hour - (other.seconds / 3600.0), this.minute - ((other.seconds / 60.0) % 60), this.second - (other.seconds % 60), this.microsecond - other.microseconds)""")
            return datetime(d=d)
        else:
            raise TypeError("expected date or datetime object")

    def __str__(self):
        return self.isoformat(' ')


class timedelta:
    def __init__(self, days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0):
        self.days = (weeks * 7.0) + days
        self.seconds = (hours * 3600.0) + (minutes * 60.0) + seconds
        self.microseconds = (milliseconds * 1000.0) + microseconds


date.min = date(1,1,1)
date.max = date(9999,12,31)
date.resolution = timedelta(1)

time.min = time(0,0)
time.max = time(23,59,59,999999)
time.resolution = timedelta(0,0,1)

datetime.min = datetime(1,1,1,0,0)
datetime.max = datetime(9999,12,31,23,59,59,999999)
datetime.resolution = timedelta(0,0,1)

timedelta.min = timedelta(-999999999)
timedelta.max = timedelta(999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
timedelta.resolution = timedelta(0,0,1)
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.