{ "info": { "author": "kzczencode", "author_email": "kzczencode@qq.com", "bugtrack_url": null, "classifiers": [], "description": "================\r\n sandglass\r\n ================\r\n \r\n \r\n \u5b89\u88c5\r\n ------------\r\n \r\n \u53ef\u4ee5::\r\n \r\n easy_install sandglass\r\n \r\n \u6216\u8005::\r\n \r\n pip install sandglass\r\n \r\n \r\n \u6982\u89c8\r\n --------\r\n \r\n **sandglass(\u6c99\u6f0f)** \u662f\u4e00\u4e2a\u589e\u5f3a\u7684\u3001\u53cb\u597d\u7684\u65f6\u95f4\u5904\u7406\u5e93\uff0c\u76ee\u7684\u662f\u4e3a\u4e86\u89e3\u653e\u7a0b\u5e8f\u5458\u7684\u751f\u4ea7\u529b\u3002\r\n \u5728python\u4e2d\u6709\u592a\u591a\u5904\u7406\u65f6\u95f4\u7684\u5e93\uff0cdatetime/date/time/calendar\u7b49\u7b49\u3002\u9700\u8981\u8bb0\u7684\u7ec6\u8282\u592a\u591a\uff0c\u9009\u62e9\u56f0\u96be\u3002\r\n \u800csandglass\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u7684\u9752\u9709\u7d20\u3002\u4ece\u5404\u79cd\u9ebb\u70e6\u7684\u8f6c\u6362\u4e2d\u89e3\u8131\u51fa\u6765\u3002\r\n \u53ea\u9700\u8bb0\u4f4f **Sandglass\u5bf9\u8c61** \u548c **ben()** \u3001 **tslice()** \u3001 **cronwalk()** \u8fd9\u51e0\u4e2a\u4e3b\u8981\u7684api\u5373\u53ef\u3002\r\n \r\n Features:\r\n ----------\r\n + api\u7b80\u6d01\uff0c\u5f00\u7bb1\u5373\u7528\r\n + \u589e\u5f3a\u63a5\u7ba1datetime\r\n + \u5185\u7f6e\u65f6\u95f4\u5b57\u7b26\u4e32\u89e3\u6790\u5668\r\n + \u65b9\u4fbf\u8fdb\u884c\u5404\u79cd\u8f6c\u6362\r\n + \u7075\u6d3b\u7684\u6784\u9020\u51fd\u6570\r\n + \u65b9\u4fbf\u7684\u83b7\u53d6\u5404\u79cd\u65f6\u95f4\u4fe1\u606f\r\n + \u652f\u6301\u4f2a\u9020\u5f53\u524d\u65f6\u95f4\uff0c\u65b9\u4fbf\u8c03\u8bd5\r\n + \u4e00\u952e\u751f\u4ea7\u65f6\u95f4\u5e8f\u5217\r\n + \u652f\u6301\u89e3\u6790crontab\u8868\u8fbe\u5f0f\r\n \r\n \u7528\u6cd5\r\n -----\r\n \u5728sandglass\u4e2d\uff0c\u6838\u5fc3\u5bf9\u8c61\u662f **Sandglass\u5bf9\u8c61** \u3002\r\n \r\n **ben()** \u51fd\u6570\u7528\u6765\u4fbf\u6377\u83b7\u53d6Sandglass\u5bf9\u8c61.::\r\n \r\n \u4e0d\u5e26\u53c2\u6570\u9ed8\u8ba4\u662f\u5f53\u524d\u65f6\u95f4\r\n >>>ben()#shortcut of Sandglass.now()\r\n \u53c2\u6570\u662f\u65f6\u95f4\u6233\r\n >>>ben(timestamp)\r\n \u53c2\u6570\u662f\u65f6\u95f4\u5b57\u7b26\u4e32\r\n >>>ben(timestr)\r\n \u53c2\u6570\u662fdatetime\u5bf9\u8c61\r\n >>>ben(datetime)\r\n \u53c2\u6570\u662fSandglass\u5bf9\u8c61\r\n >>>ben(Sandglass)\r\n \u663e\u5f0f\u6307\u660e\u683c\u5f0f\r\n >>>ben('2013-01-01','%Y-%m-%d')\r\n datetime-like\u7684\u6784\u9020\u5668\r\n >>>ben(year=2013,month=2,day=8,hour=7)\r\n \r\n \u4e5f\u5c31\u662f\u8bf4\uff0c\u53ea\u8981\u628a\u80fd\u8868\u8fbe\u65f6\u95f4\u7684\u4e1c\u897f\u585e\u7ed9ben()\u5c31\u884c\u4e86\u3002\r\n \u503c\u5f97\u4e00\u8bf4\u7684\u662fben(timestr)\u4e2d\u901a\u8fc7\u4e00\u4e2a\u8bcd\u6cd5\u89e3\u6790\u7684\u4e1c\u897f\uff0c\u4f7f\u5f97timestr\u53ef\u4ee5\u5f88\u7075\u6d3b\u3002\u5927\u4f53\u89c4\u5219\u662f\uff0c\u5982\u679c\u7f3a\u5c11\u5e74\u6708\u65e5\u4fe1\u606f\uff0c\u5219\u9ed8\u8ba4\u7528\u5f53\u524d\u65f6\u95f4\u7684\u5e74\u6708\u65e5\uff1b\u5982\u679c\u7f3a\u5c11\u65f6\u5206\u79d2\u4fe1\u606f\uff0c\u5219\u9ed8\u8ba4\u662f0::\r\n \r\n >>>ben('2013,1,1') == ben('2013-01,01') == ben('2013 1 01') == ben('2013-01-01 00:00:00')\r\n True\r\n >>>ben('2013,1,1 19:23') == ben('2013-01-01 19:23:00')\r\n True\r\n >>>now = datetime.now()\r\n >>>ben('19:23').year == now.year\r\n True\r\n >>>ben('19:23').month == now.month\r\n True\r\n >>>ben('19:23').day == now.day\r\n True\r\n >>> ben('19:23').hour,ben('19:23').minute,ben('19:23').second\r\n (19,23,0)\r\n \r\n **Sandglass\u5bf9\u8c61** \uff0c\u901a\u8fc7\u8fd9\u4e2a\u5bf9\u8c61\uff0c\u53ef\u4ee5\u65b9\u4fbf\u7684\u83b7\u53d6\u5404\u4e2a\u65f6\u95f4\u5c5e\u6027\u548c\u64cd\u4f5c::\r\n \r\n >>>sg = ben('2013,1,1 13:14:15')\r\n >>>sg\r\n \r\n >>>sg.year,sg.month,sg.day,sg.hour,sg.minute,sg.second,sg.microsecond\r\n (2013, 1, 1, 13, 14, 15, 0)\r\n >>> sg.timestamp#\u8fd8\u80fd\u76f4\u63a5\u83b7\u53d6timestamp\r\n 1357017255.0\r\n \r\n #\u4fbf\u6377\u7684\u83b7\u53d6\u5e38\u7528\u7684sql\u683c\u5f0f\r\n >>> sg.sql\r\n '2013-01-01 13:14:15'\r\n >>> sg.sqldate\r\n '2013-01-01'\r\n >>> sg.sqltime\r\n '13:14:15'\r\n \r\n #\u8fdb\u884c\u589e\u91cf\u53d8\u6362(shift\u662f\u539f\u5730\u64cd\u4f5c\uff0c\u800cshifted\u8fd4\u56de\u4e00\u4e2a\u65b0\u7684\u5bf9\u8c61)\r\n >>> sg.shifted(day=1,minute=-2)\r\n \r\n >>> sg.hour=23\r\n >>> sg\r\n \r\n \r\n >>> sg.floor('hour'),sg.ceil('hour')\r\n (, )\r\n >>> sg.floor('year'),sg.ceil('year')\r\n (, )\r\n >>> sg.round(30*60)\r\n \r\n >>> sg.roundfloor(30*60)\r\n \r\n \r\n #\u91cd\u8f7d\u7b26\u53f7\r\n >>>sg3 = Sandglass(year=2013,month=2,day=27,hour=0)\r\n >>>sg4 = Sandglass(year=2013,month=3,day=1,hour=0)\r\n >>> sg3==sg4\r\n False\r\n >>> sg3>> sg3>sg4\r\n False\r\n >>> sg4-sg3\r\n datetime.timedelta(2)\r\n \r\n #mock\u5f53\u524d\u65f6\u95f4\uff0c\u8fd9\u6837\u5c31\u6d4b\u8bd5\u7684\u65f6\u5019\u5c31\u4e0d\u7528\u6539\u65f6\u95f4\uff0c\u76f4\u63a5mock\u7ed9\u5f53\u524d\u65f6\u95f4\u52a0\u4e0a\u4e2a\u504f\u79fb\u91cf\u5c31\u884c\u4e86\r\n #\u6bd4\u5982\u6211\u8981\u628a\u65f6\u95f4\u5f80\u540e\u63a8\u4e00\u5929\r\n >>> ben()\r\n \r\n >>> Sandglass.mock(day=1)\r\n >>> ben()\r\n \r\n >>> ben()\r\n \r\n >>> Sandglass.unmock()\r\n >>> ben()\r\n \r\n \r\n #\u5176\u5b83\r\n >>> sg\r\n \r\n >>> sg.raw()\r\n datetime.datetime(2013, 1, 1, 23, 14, 15)\r\n >>> sg.clone()\r\n \r\n >>> sg.replace(day=2)\r\n >>> sg\r\n \r\n >>> sg.days_in_month\r\n 31\r\n >>> sg.is_today()\r\n False\r\n >>> sg.is_past_date()\r\n True\r\n >>> sg.is_future_date()\r\n False\r\n >>> sg.strftime('%Y/%m/%d')\r\n '2013/01/02'\r\n >>> Sandglass.strptime('20130203','%Y%m%d')\r\n \r\n \r\n **tslice** ,\u53d7\u5185\u7f6e\u51fd\u6570xrange\u542f\u53d1\uff0c\u7528\u4e8e\u83b7\u53d6\u4e00\u4e2a\u65f6\u95f4\u5e8f\u5217\u3002\r\n \r\n \u683c\u5f0f\u662f::\r\n \r\n tslice(unit,start=None,end=None,step=1,count=None) -> generator of Sandglass object\r\n unit in ['year', 'month', 'day', 'hour', 'minute', 'second', 'microsecond']\r\n \r\n \u8ddfxrange\u4e00\u6837\uff0cstep\u53ef\u4ee5\u662f\u8d1f\u6570\u3002\u5982\u679cstart\u4e3a\u7a7a\uff0c\u5219\u9ed8\u8ba4\u662f\u5f53\u524d\u65f6\u95f4\u3002\r\n \r\n \u793a\u4f8b::\r\n \r\n >>>list(tslice('day','2013-01-01','2013-01-04'))\r\n [,\r\n ,\r\n ]\r\n \r\n >>>list(tslice('day','2013-01-04','2013-01-01',step=-1))\r\n [,\r\n ,\r\n ]\r\n \r\n >>>list(tslice('day','2013-01-04','2013-01-31',step=3,count=2))\r\n [,\r\n ]\r\n \r\n >>>list(tslice('year',start='2013-01-04',count=2))\r\n [,\r\n ]\r\n \r\n >>>list(tslice('minute',start='2013-01-04',count=2))\r\n [,\r\n ]\r\n \r\n \r\n **cronwalk** ,\u7528\u4e8e\u5bf9crontab\u8868\u8fbe\u5f0f\u8fdb\u884c\u6f14\u7b97\uff0c\u5f97\u5230\u4e0b\u4e00\u4e2a\u6267\u884c\u7684\u65f6\u95f4\u3002\r\n \r\n \u683c\u5f0f::\r\n \r\n cronwalk(expr,base=None)# \u5982\u679cbase\u4e3a\u7a7a\uff0c\u9ed8\u8ba4\u662f\u5f53\u524d\u65f6\u95f4\u3002\r\n \r\n \u793a\u4f8b::\r\n \r\n >>>c = iter(cronwalk('0 6 * * *',base='2013-02-03'))\r\n >>>next(c)\r\n \r\n >>>next(c)\r\n \r\n \r\n >>>c = iter(cronwalk('0 23-7/2 * * *',base='2013-02-03 08:30:00'))\r\n >>>next(c)\r\n \r\n >>>next(c)\r\n \r\n \r\n **timediff** ,\u7528\u4e8e\u8ba1\u7b97\u8ddd\u79bb\u4e0b\u4e2a\u6307\u5b9a\u65f6\u95f4\u8fd8\u6709\u591a\u4e45\uff0c\u6bd4\u5982\u6709\u4e2a\u6d3b\u52a8\u662f\u6bcf\u592920:00:00\u5f00\u59cb\u7684\uff0c\u8981\u8ba1\u7b97\u8ddd\u79bb\u6d3b\u52a8\u5f00\u59cb\u8fd8\u6709\u591a\u4e45::\r\n \r\n >>>timediff('20:00:00',factor=86400,base='19:30:00')\r\n 1800\r\n >>>timediff('20:00:00',factor=86400,base='21:30:00')\r\n 81000\r\n \r\n \r\n Todo\r\n ---------\r\n * Add timezone support\r\n \r\n Changelog\r\n ---------\r\n **0.0.1**\r\n \r\n * Initial release", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kzczencode/sandglass", "keywords": "datetime", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "sandglass", "package_url": "https://pypi.org/project/sandglass/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sandglass/", "project_urls": { "Homepage": "https://github.com/kzczencode/sandglass" }, "release_url": "https://pypi.org/project/sandglass/0.0.1/", "requires_dist": null, "requires_python": null, "summary": "datetime enhance", "version": "0.0.1" }, "last_serial": 1083489, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "660ef794bbc95bf8ab93e8b45dfc5190", "sha256": "136a7a5d6f1ea3f2f422cc0088a7f64917537f31467f9a5c92c7e86111123e00" }, "downloads": -1, "filename": "sandglass-0.0.1.tar.gz", "has_sig": false, "md5_digest": "660ef794bbc95bf8ab93e8b45dfc5190", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16261, "upload_time": "2014-05-06T10:18:15", "url": "https://files.pythonhosted.org/packages/92/ce/9ca6878969fb80498f3fed887b24518971857c11321b1fd96a232d7d965a/sandglass-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "660ef794bbc95bf8ab93e8b45dfc5190", "sha256": "136a7a5d6f1ea3f2f422cc0088a7f64917537f31467f9a5c92c7e86111123e00" }, "downloads": -1, "filename": "sandglass-0.0.1.tar.gz", "has_sig": false, "md5_digest": "660ef794bbc95bf8ab93e8b45dfc5190", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16261, "upload_time": "2014-05-06T10:18:15", "url": "https://files.pythonhosted.org/packages/92/ce/9ca6878969fb80498f3fed887b24518971857c11321b1fd96a232d7d965a/sandglass-0.0.1.tar.gz" } ] }