# 1 NbTime 介绍
为什么要写处理时间的包
```
开发中,关于处理时间转换虽然是一件不值一提很微不足道很小的事情,但也是一个常见的事情。
封装的不好的时间操作工具库,造成每次调用麻烦,例如要调用不同的函数来处理 时间戳 时间字符串 时间对象 之间的转换,
以及烦人的时区的转化,可能从一个时间种类变化到另一个时间类型形态,用户在中间过程要调用三四次不同的函数来转化,才能处理得到想要的最终结果。
NbTime对象实例化入参接受所有种类的入参,不需要用户针对不同的传参类型做时间转化而选择不同的函数,用户无脑将任意入参传给NbTime即可;
并将常用的时间处理转化结果,作为对象的属性。
一个NbTime的实例化入参搞定所有时间转化需求,不需要用户亲自去选择各种用途的时间转换函数来对时间做转换。
```
例如像下面图片这种 模块级 + 各种各样的函数 封装的 时间工具包,就太不好用了。
封装时间操作不难,但如果封装的不好用,造成项目中调用它处处难。
![img_2.png](img_2.png)
```
NbTime 是oop面向对象开发的爽快的日期时间操作类
NbTime 支持无限链式操作来处理时间,
(因为是oop所以易用程度远远的暴击面向过程python工程师写的time_utils.py里面
写几百个独立的操作时间的面向过程函数)
NbTime 入参支持 None 字符串 时间戳 datetime对象 NbTime对象自身
NbTime 支持将任意格式的时间字符串转成时间对象,无需提前精确指定写 yyyyy-mm-dd HHMMSS 这样的模板。
NbTime 非常轻松支持时区转化
Nbtime 内置属性 datetime对象,兼容性好
NbTime操作时间,远远暴击使用datetime和三方arrow包,
远远暴击用户在 utils.time_utils.py文件中写几百个孤立的面向过程操作时间的函数.
```
## 1.1 安装
pip install nb_time
# 2 NbTime 时间值传参用法
## 2.1 NbTime 不传参,就是当前时间
```
>>> from nb_time import NbTime
>>> NbTime()
<NbTime [2024-02-29 17:51:14 +0800]>
```
## 2.2 NbTime 传参datetime对象
```
>>> NbTime(datetime.datetime.now())
<NbTime [2024-02-29 17:56:43 +0800]>
```
## 2.3 NbTime 传参时间戳
```
>>> NbTime(1709192429)
<NbTime [2024-02-29 15:40:29 +0800]>
```
## 2.4 NbTime 传参字符串,可以对字符串设置时区,例如把东七区的时间字符串转化成东8区的格式.
```
>>> NbTime('2024-02-26 15:58:21',datetime_formatter=NbTime.FORMATTER_DATETIME,time_zone=NbTime.TIMEZONE_EASTERN_7).to_tz('UTC+8')
<NbTime [2024-02-26 16:58:21 +0800]>
```
## 2.4.b Nbtime 万能自动识别时间字符串模板,可以将所有常见的时间字符串转换成时间对象
Nbtime 万能自动识别时间字符串模板,可以将所有常见的时间字符串转换成时间对象,不需要提前精确的写 yyyy-mm-dd 这样的。
以下例子都能直接转化成时间对象,无视时间字符串格式。
```python
from nb_time import NbTime
print(NbTime('20230506T010203.886 +08:00'))
print(NbTime('2023-05-06 01:02:03.886'))
print(NbTime('2023-05-06T01:02:03.886 +08:00'))
print(NbTime('20221206 1:2:3'))
print(NbTime('Fri Jul 19 06:38:27 2024'))
print(NbTime('2013-05-05 12:30:45 America/Chicago'))
```
## 2.5 NbTime 传参 DateTimeValue类型对象
```
>>> from nb_time import DateTimeValue
>>> NbTime(DateTimeValue(year=2022,month=5,day=9,hour=6),time_zone='UTC+7')
<NbTime [2022-05-09 06:00:00 +0700]>
```
## 2.6 NbTime传参 NbTime对象
NbTime入参本身支持无限嵌套NbTime对象
```
NbTime(NbTime(NbTime(NbTime())))
<NbTime [2024-02-29 18:39:09]>
为什么 NbTime支持入参是自身类型,例如你可以方便的转时区和转字符串格式化
例如0时区的2024-02-29 07:40:34,你要转化成8时区的带毫秒带时区的时间字符串,
>>> from nb_time import NbTime
>>> NbTime(NbTime('2024-02-29 07:40:34', time_zone='UTC+0', datetime_formatter=NbTime.FORMATTER_DATETIME_NO_ZONE),
... time_zone='UTC+8', datetime_formatter=NbTime.FORMATTER_MILLISECOND).datetime_str
'2024-02-29 15:40:34.000000 +0800'
```
# 3 NbTime 链式计算时间
NbTime().shift方法返回的对象仍然是Nbtime类型。
因为Nbtime对象本身具有很多好用的属性和方法,所以使用NbTime作为时间转化的中转对象,比使用datetime作为中转对象方便使用很多。
求3天1小时10分钟后的时间,入参支持正数和负数
```
>>> NbTime().shift(hours=1,minutes=10).shift(days=3)
<NbTime [2024-03-03 19:02:49 +0800]>
```
求当前时间1天之前的时间戳
```commandline
>>> NbTime().shift(days=-1).timestamp
1709290123.409756
```
# 3 NbTime 时区设置
## 3.1 NbTime 实例化时候设置时区
实例化时候分别设置东7区和0时区
```
>>> NbTime(time_zone='UTC+7')
<NbTime [2024-02-29 17:05:08 +0700]>
>>> NbTime(time_zone='UTC+0')
<NbTime [2024-02-29 10:05:08 +0000]>
```
## 3.2 全局设置时区
用户不传递时区时候,默认就是操作系统时区,如果用户想统一设置时区
例如用户统一设置东8区,以后实例化就不用每次亲自传递东八区.
```
NbTime.set_default_time_zone('UTC+8')
```
# 4 设置时间字符串格式化
## 4.1 NBTime实例化时候设置时间字符串格式
用户不想要毫秒时间字符串
```
>>> NbTime(datetime_formatter=NbTime.FORMATTER_DATETIME)
<NbTime [2024-02-29 18:10:57 +0800]>
```
用户不想要字符串带时区
```
>>> NbTime(datetime_formatter=NbTime.FORMATTER_DATETIME_NO_ZONE)
<NbTime [2024-02-29 18:12:18]>
```
## 4.2 NBTime全局设置字符串格式
NbTime.set_default_formatter 可以全局设置时间格式字符串,就不需要每次都传递格式
```
>>> NbTime.set_default_formatter(NbTime.FORMATTER_DATETIME_NO_ZONE)
>>> NbTime()
<NbTime [2024-02-29 18:14:38]>
```
# 5 NbTime 对象内置的成员属性
见下面的交互,NbTime类型对象有非常便捷的各种成员变量,
```
datetime 类型datetime.datetime类型的时间对象,这个很方便和内置类型关联起来
time_zone_obj 时区
datetime_str 日期时间字符串
time_str 时间字符串
date_str 日期字符串
timestamp 时间戳秒
timestamp_millisecond 时间戳毫秒
today_zero_timestamp 当天凌晨的时间戳
```
```
>>> nbt=NbTime()
>>> nbt.datetime
datetime.datetime(2024, 2, 29, 18, 16, 23, 541415, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
>>> nbt.time_zone_obj
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
>>> nbt.datetime_str
'2024-02-29 18:16:23'
>>> nbt.time_str
'18:16:23'
>>> nbt.date_str
'2024-02-29'
>>> nbt.timestamp
1709201783.541415
>>> nbt.timestamp_millisecond
1709201783541.415
>>> nbt.today_zero_timestamp
1709136000
```
# 6 NbTime的方法
## 6.1 get_str 方法转化成任意字符串格式
```
例如获取今天的年月日,中间不要带 -
>>> NbTime().get_str('%Y%m%d')
20240301
```
## 6.2 shift 是计算生成新的NbTime对象,支持无限连续链式操作
```
求3天1小时10分钟后的时间,入参支持正数和负数
>>> NbTime().shift(hours=1,minutes=10).shift(days=3)
<NbTime [2024-03-03 19:02:49 +0800]>
```
## 6.3 to_tz 是生成新的时区的NbTime对象,把NbTime对象转化成另一个时区.
```
一个东7区的时间:
>>> NbTime('2024-02-26 15:58:21',datetime_formatter=NbTime.FORMATTER_DATETIME,time_zone=NbTime.TIMEZONE_EASTERN_7)
<NbTime [2024-02-26 15:58:21 +0700]>
那这个东7区的时间转化成东8区的时间:
>>> NbTime('2024-02-26 15:58:21',datetime_formatter=NbTime.FORMATTER_DATETIME,time_zone=NbTime.TIMEZONE_EASTERN_7).to_tz('UTC+8')
<NbTime [2024-02-26 16:58:21 +0800]>
```
## 6.4 NbTime 对象 支持 > < = 比较
```
NbTime 实现了 __gt__ __lt__ __eq__ 方法,可以直接比较大小
>>> NbTime() > NbTime('2023-05-06 01:01:01')
True
>>> NbTime() > NbTime('2025-05-06 01:01:01')
False
```
# 7.用户自定义继承 NbTime 类
因为 nb_time 是 oop面向对象开发的,所以可以继承,
如果是面向过程编程,使用模块级 + 函数的方式来编程,先改变模块的某个全局变量或者函数逻辑,只能使用猴子补丁技术,而且模块天然还是个单例,不适合多次猴子补丁
面向对象就是有优势.
## 7.1 例如用户想使用 UTC 0时区,但是不想频繁传递 时区入参,可以使用 nb_time的 自带的UtcNbTime 类,或者用户手写这个类自己继承NbTime
```python
class UtcNbTime(NbTime):
default_time_zone = NbTime.TIMEZONE_UTC
# 使用的时候
UtcNbTime()
```
## 7.2 例如 用户想使用上海时区,并且默认使用不带时区的时间字符串格式化
```python
class ShanghaiNbTime(NbTime):
default_time_zone = NbTime.TIMEZONE_ASIA_SHANGHAI
default_formatter = NbTime.FORMATTER_DATETIME_NO_ZONE
# 使用的时候
ShanghaiNbTime()
```
## 7.3 数据分析,常用的时间也可以加上来
```python
class PopularNbTime(NbTime):
@property
def ago_1_days(self):
return self.shift(days=-1)
@property
def ago_7_days(self):
return self.shift(days=-7)
@property
def ago_30_days(self):
return self.shift(days=-30)
@property
def ago_180_days(self):
return self.shift(days=-180)
```
# 8 NbTime总结
```
总结就是 NbTime 的入参接受所有类型,NbTime支持链式调用,Nbtime方便支持时区,Nbtime方便操作时间转化,
所以NbTime操作时间,远远暴击使用datetime和三方arrow包,
远远暴击用户在 utils.time_utils.py文件中写几百个孤立的面向过程操作时间的函数.
```
Raw data
{
"_id": null,
"home_page": "https://github.com/ydf0509/nb_time",
"name": "nb-time",
"maintainer": "ydf",
"docs_url": null,
"requires_python": null,
"maintainer_email": "ydf0509@sohu.com",
"keywords": "arrow, time, datetime, time_utils",
"author": "bfzs",
"author_email": "ydf0509@sohu.com",
"download_url": "https://files.pythonhosted.org/packages/dc/49/ce69434437d4e52cc37e046287e3e618a5a1760f4740df4db66e1f6a0361/nb_time-2.2.tar.gz",
"platform": "all",
"description": "\r\n\r\n# 1 NbTime \u4ecb\u7ecd\r\n\r\n\u4e3a\u4ec0\u4e48\u8981\u5199\u5904\u7406\u65f6\u95f4\u7684\u5305\r\n```\r\n\u5f00\u53d1\u4e2d\uff0c\u5173\u4e8e\u5904\u7406\u65f6\u95f4\u8f6c\u6362\u867d\u7136\u662f\u4e00\u4ef6\u4e0d\u503c\u4e00\u63d0\u5f88\u5fae\u4e0d\u8db3\u9053\u5f88\u5c0f\u7684\u4e8b\u60c5\uff0c\u4f46\u4e5f\u662f\u4e00\u4e2a\u5e38\u89c1\u7684\u4e8b\u60c5\u3002\r\n\u5c01\u88c5\u7684\u4e0d\u597d\u7684\u65f6\u95f4\u64cd\u4f5c\u5de5\u5177\u5e93\uff0c\u9020\u6210\u6bcf\u6b21\u8c03\u7528\u9ebb\u70e6\uff0c\u4f8b\u5982\u8981\u8c03\u7528\u4e0d\u540c\u7684\u51fd\u6570\u6765\u5904\u7406 \u65f6\u95f4\u6233 \u65f6\u95f4\u5b57\u7b26\u4e32 \u65f6\u95f4\u5bf9\u8c61 \u4e4b\u95f4\u7684\u8f6c\u6362\uff0c\r\n\u4ee5\u53ca\u70e6\u4eba\u7684\u65f6\u533a\u7684\u8f6c\u5316\uff0c\u53ef\u80fd\u4ece\u4e00\u4e2a\u65f6\u95f4\u79cd\u7c7b\u53d8\u5316\u5230\u53e6\u4e00\u4e2a\u65f6\u95f4\u7c7b\u578b\u5f62\u6001\uff0c\u7528\u6237\u5728\u4e2d\u95f4\u8fc7\u7a0b\u8981\u8c03\u7528\u4e09\u56db\u6b21\u4e0d\u540c\u7684\u51fd\u6570\u6765\u8f6c\u5316\uff0c\u624d\u80fd\u5904\u7406\u5f97\u5230\u60f3\u8981\u7684\u6700\u7ec8\u7ed3\u679c\u3002\r\nNbTime\u5bf9\u8c61\u5b9e\u4f8b\u5316\u5165\u53c2\u63a5\u53d7\u6240\u6709\u79cd\u7c7b\u7684\u5165\u53c2\uff0c\u4e0d\u9700\u8981\u7528\u6237\u9488\u5bf9\u4e0d\u540c\u7684\u4f20\u53c2\u7c7b\u578b\u505a\u65f6\u95f4\u8f6c\u5316\u800c\u9009\u62e9\u4e0d\u540c\u7684\u51fd\u6570\uff0c\u7528\u6237\u65e0\u8111\u5c06\u4efb\u610f\u5165\u53c2\u4f20\u7ed9NbTime\u5373\u53ef\uff1b\r\n\u5e76\u5c06\u5e38\u7528\u7684\u65f6\u95f4\u5904\u7406\u8f6c\u5316\u7ed3\u679c\uff0c\u4f5c\u4e3a\u5bf9\u8c61\u7684\u5c5e\u6027\u3002\r\n\u4e00\u4e2aNbTime\u7684\u5b9e\u4f8b\u5316\u5165\u53c2\u641e\u5b9a\u6240\u6709\u65f6\u95f4\u8f6c\u5316\u9700\u6c42\uff0c\u4e0d\u9700\u8981\u7528\u6237\u4eb2\u81ea\u53bb\u9009\u62e9\u5404\u79cd\u7528\u9014\u7684\u65f6\u95f4\u8f6c\u6362\u51fd\u6570\u6765\u5bf9\u65f6\u95f4\u505a\u8f6c\u6362\u3002\r\n```\r\n\r\n\u4f8b\u5982\u50cf\u4e0b\u9762\u56fe\u7247\u8fd9\u79cd \u6a21\u5757\u7ea7 + \u5404\u79cd\u5404\u6837\u7684\u51fd\u6570 \u5c01\u88c5\u7684 \u65f6\u95f4\u5de5\u5177\u5305\uff0c\u5c31\u592a\u4e0d\u597d\u7528\u4e86\u3002\r\n\r\n\u5c01\u88c5\u65f6\u95f4\u64cd\u4f5c\u4e0d\u96be\uff0c\u4f46\u5982\u679c\u5c01\u88c5\u7684\u4e0d\u597d\u7528\uff0c\u9020\u6210\u9879\u76ee\u4e2d\u8c03\u7528\u5b83\u5904\u5904\u96be\u3002\r\n\r\n![img_2.png](img_2.png)\r\n\r\n```\r\nNbTime \u662foop\u9762\u5411\u5bf9\u8c61\u5f00\u53d1\u7684\u723d\u5feb\u7684\u65e5\u671f\u65f6\u95f4\u64cd\u4f5c\u7c7b\r\nNbTime \u652f\u6301\u65e0\u9650\u94fe\u5f0f\u64cd\u4f5c\u6765\u5904\u7406\u65f6\u95f4,\r\n(\u56e0\u4e3a\u662foop\u6240\u4ee5\u6613\u7528\u7a0b\u5ea6\u8fdc\u8fdc\u7684\u66b4\u51fb\u9762\u5411\u8fc7\u7a0bpython\u5de5\u7a0b\u5e08\u5199\u7684time_utils.py\u91cc\u9762\r\n\u5199\u51e0\u767e\u4e2a\u72ec\u7acb\u7684\u64cd\u4f5c\u65f6\u95f4\u7684\u9762\u5411\u8fc7\u7a0b\u51fd\u6570)\r\n\r\nNbTime \u5165\u53c2\u652f\u6301 None \u5b57\u7b26\u4e32 \u65f6\u95f4\u6233 datetime\u5bf9\u8c61 NbTime\u5bf9\u8c61\u81ea\u8eab\r\nNbTime \u652f\u6301\u5c06\u4efb\u610f\u683c\u5f0f\u7684\u65f6\u95f4\u5b57\u7b26\u4e32\u8f6c\u6210\u65f6\u95f4\u5bf9\u8c61\uff0c\u65e0\u9700\u63d0\u524d\u7cbe\u786e\u6307\u5b9a\u5199 yyyyy-mm-dd HHMMSS \u8fd9\u6837\u7684\u6a21\u677f\u3002\r\nNbTime \u975e\u5e38\u8f7b\u677e\u652f\u6301\u65f6\u533a\u8f6c\u5316\r\nNbtime \u5185\u7f6e\u5c5e\u6027 datetime\u5bf9\u8c61,\u517c\u5bb9\u6027\u597d\r\n\r\nNbTime\u64cd\u4f5c\u65f6\u95f4,\u8fdc\u8fdc\u66b4\u51fb\u4f7f\u7528datetime\u548c\u4e09\u65b9arrow\u5305,\r\n\u8fdc\u8fdc\u66b4\u51fb\u7528\u6237\u5728 utils.time_utils.py\u6587\u4ef6\u4e2d\u5199\u51e0\u767e\u4e2a\u5b64\u7acb\u7684\u9762\u5411\u8fc7\u7a0b\u64cd\u4f5c\u65f6\u95f4\u7684\u51fd\u6570.\r\n```\r\n\r\n## 1.1 \u5b89\u88c5 \r\n\r\npip install nb_time\r\n\r\n# 2 NbTime \u65f6\u95f4\u503c\u4f20\u53c2\u7528\u6cd5\r\n\r\n## 2.1 NbTime \u4e0d\u4f20\u53c2,\u5c31\u662f\u5f53\u524d\u65f6\u95f4\r\n```\r\n>>> from nb_time import NbTime\r\n>>> NbTime() \r\n<NbTime [2024-02-29 17:51:14 +0800]>\r\n```\r\n\r\n## 2.2 NbTime \u4f20\u53c2datetime\u5bf9\u8c61\r\n\r\n```\r\n>>> NbTime(datetime.datetime.now())\r\n<NbTime [2024-02-29 17:56:43 +0800]>\r\n```\r\n\r\n## 2.3 NbTime \u4f20\u53c2\u65f6\u95f4\u6233\r\n```\r\n>>> NbTime(1709192429)\r\n<NbTime [2024-02-29 15:40:29 +0800]>\r\n```\r\n\r\n## 2.4 NbTime \u4f20\u53c2\u5b57\u7b26\u4e32,\u53ef\u4ee5\u5bf9\u5b57\u7b26\u4e32\u8bbe\u7f6e\u65f6\u533a,\u4f8b\u5982\u628a\u4e1c\u4e03\u533a\u7684\u65f6\u95f4\u5b57\u7b26\u4e32\u8f6c\u5316\u6210\u4e1c8\u533a\u7684\u683c\u5f0f.\r\n```\r\n>>> NbTime('2024-02-26 15:58:21',datetime_formatter=NbTime.FORMATTER_DATETIME,time_zone=NbTime.TIMEZONE_EASTERN_7).to_tz('UTC+8')\r\n<NbTime [2024-02-26 16:58:21 +0800]>\r\n```\r\n\r\n## 2.4.b Nbtime \u4e07\u80fd\u81ea\u52a8\u8bc6\u522b\u65f6\u95f4\u5b57\u7b26\u4e32\u6a21\u677f\uff0c\u53ef\u4ee5\u5c06\u6240\u6709\u5e38\u89c1\u7684\u65f6\u95f4\u5b57\u7b26\u4e32\u8f6c\u6362\u6210\u65f6\u95f4\u5bf9\u8c61\r\n\r\nNbtime \u4e07\u80fd\u81ea\u52a8\u8bc6\u522b\u65f6\u95f4\u5b57\u7b26\u4e32\u6a21\u677f\uff0c\u53ef\u4ee5\u5c06\u6240\u6709\u5e38\u89c1\u7684\u65f6\u95f4\u5b57\u7b26\u4e32\u8f6c\u6362\u6210\u65f6\u95f4\u5bf9\u8c61\uff0c\u4e0d\u9700\u8981\u63d0\u524d\u7cbe\u786e\u7684\u5199 yyyy-mm-dd \u8fd9\u6837\u7684\u3002\r\n\r\n\u4ee5\u4e0b\u4f8b\u5b50\u90fd\u80fd\u76f4\u63a5\u8f6c\u5316\u6210\u65f6\u95f4\u5bf9\u8c61\uff0c\u65e0\u89c6\u65f6\u95f4\u5b57\u7b26\u4e32\u683c\u5f0f\u3002\r\n\r\n```python\r\nfrom nb_time import NbTime\r\nprint(NbTime('20230506T010203.886 +08:00'))\r\nprint(NbTime('2023-05-06 01:02:03.886'))\r\nprint(NbTime('2023-05-06T01:02:03.886 +08:00'))\r\nprint(NbTime('20221206 1:2:3'))\r\nprint(NbTime('Fri Jul 19 06:38:27 2024'))\r\nprint(NbTime('2013-05-05 12:30:45 America/Chicago'))\r\n```\r\n\r\n## 2.5 NbTime \u4f20\u53c2 DateTimeValue\u7c7b\u578b\u5bf9\u8c61\r\n```\r\n>>> from nb_time import DateTimeValue\r\n>>> NbTime(DateTimeValue(year=2022,month=5,day=9,hour=6),time_zone='UTC+7')\r\n<NbTime [2022-05-09 06:00:00 +0700]>\r\n\r\n```\r\n\r\n## 2.6 NbTime\u4f20\u53c2 NbTime\u5bf9\u8c61\r\n\r\nNbTime\u5165\u53c2\u672c\u8eab\u652f\u6301\u65e0\u9650\u5d4c\u5957NbTime\u5bf9\u8c61\r\n```\r\nNbTime(NbTime(NbTime(NbTime())))\r\n<NbTime [2024-02-29 18:39:09]>\r\n\r\n\r\n\u4e3a\u4ec0\u4e48 NbTime\u652f\u6301\u5165\u53c2\u662f\u81ea\u8eab\u7c7b\u578b,\u4f8b\u5982\u4f60\u53ef\u4ee5\u65b9\u4fbf\u7684\u8f6c\u65f6\u533a\u548c\u8f6c\u5b57\u7b26\u4e32\u683c\u5f0f\u5316\r\n\u4f8b\u59820\u65f6\u533a\u76842024-02-29 07:40:34,\u4f60\u8981\u8f6c\u5316\u62108\u65f6\u533a\u7684\u5e26\u6beb\u79d2\u5e26\u65f6\u533a\u7684\u65f6\u95f4\u5b57\u7b26\u4e32,\r\n>>> from nb_time import NbTime \r\n>>> NbTime(NbTime('2024-02-29 07:40:34', time_zone='UTC+0', datetime_formatter=NbTime.FORMATTER_DATETIME_NO_ZONE),\r\n... time_zone='UTC+8', datetime_formatter=NbTime.FORMATTER_MILLISECOND).datetime_str\r\n'2024-02-29 15:40:34.000000 +0800'\r\n```\r\n\r\n# 3 NbTime \u94fe\u5f0f\u8ba1\u7b97\u65f6\u95f4\r\n\r\nNbTime().shift\u65b9\u6cd5\u8fd4\u56de\u7684\u5bf9\u8c61\u4ecd\u7136\u662fNbtime\u7c7b\u578b\u3002\r\n\u56e0\u4e3aNbtime\u5bf9\u8c61\u672c\u8eab\u5177\u6709\u5f88\u591a\u597d\u7528\u7684\u5c5e\u6027\u548c\u65b9\u6cd5\uff0c\u6240\u4ee5\u4f7f\u7528NbTime\u4f5c\u4e3a\u65f6\u95f4\u8f6c\u5316\u7684\u4e2d\u8f6c\u5bf9\u8c61\uff0c\u6bd4\u4f7f\u7528datetime\u4f5c\u4e3a\u4e2d\u8f6c\u5bf9\u8c61\u65b9\u4fbf\u4f7f\u7528\u5f88\u591a\u3002\r\n\r\n\r\n\u6c423\u59291\u5c0f\u65f610\u5206\u949f\u540e\u7684\u65f6\u95f4,\u5165\u53c2\u652f\u6301\u6b63\u6570\u548c\u8d1f\u6570\r\n```\r\n>>> NbTime().shift(hours=1,minutes=10).shift(days=3)\r\n<NbTime [2024-03-03 19:02:49 +0800]>\r\n```\r\n\r\n\u6c42\u5f53\u524d\u65f6\u95f41\u5929\u4e4b\u524d\u7684\u65f6\u95f4\u6233\r\n```commandline\r\n>>> NbTime().shift(days=-1).timestamp\r\n1709290123.409756\r\n\r\n```\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n# 3 NbTime \u65f6\u533a\u8bbe\u7f6e\r\n\r\n## 3.1 NbTime \u5b9e\u4f8b\u5316\u65f6\u5019\u8bbe\u7f6e\u65f6\u533a\r\n\r\n\u5b9e\u4f8b\u5316\u65f6\u5019\u5206\u522b\u8bbe\u7f6e\u4e1c7\u533a\u548c0\u65f6\u533a\r\n```\r\n>>> NbTime(time_zone='UTC+7')\r\n<NbTime [2024-02-29 17:05:08 +0700]>\r\n>>> NbTime(time_zone='UTC+0') \r\n<NbTime [2024-02-29 10:05:08 +0000]>\r\n```\r\n\r\n## 3.2 \u5168\u5c40\u8bbe\u7f6e\u65f6\u533a\r\n\u7528\u6237\u4e0d\u4f20\u9012\u65f6\u533a\u65f6\u5019,\u9ed8\u8ba4\u5c31\u662f\u64cd\u4f5c\u7cfb\u7edf\u65f6\u533a,\u5982\u679c\u7528\u6237\u60f3\u7edf\u4e00\u8bbe\u7f6e\u65f6\u533a\r\n\r\n\u4f8b\u5982\u7528\u6237\u7edf\u4e00\u8bbe\u7f6e\u4e1c8\u533a,\u4ee5\u540e\u5b9e\u4f8b\u5316\u5c31\u4e0d\u7528\u6bcf\u6b21\u4eb2\u81ea\u4f20\u9012\u4e1c\u516b\u533a.\r\n```\r\nNbTime.set_default_time_zone('UTC+8')\r\n```\r\n\r\n# 4 \u8bbe\u7f6e\u65f6\u95f4\u5b57\u7b26\u4e32\u683c\u5f0f\u5316\r\n\r\n## 4.1 NBTime\u5b9e\u4f8b\u5316\u65f6\u5019\u8bbe\u7f6e\u65f6\u95f4\u5b57\u7b26\u4e32\u683c\u5f0f\r\n\u7528\u6237\u4e0d\u60f3\u8981\u6beb\u79d2\u65f6\u95f4\u5b57\u7b26\u4e32\r\n```\r\n>>> NbTime(datetime_formatter=NbTime.FORMATTER_DATETIME) \r\n<NbTime [2024-02-29 18:10:57 +0800]>\r\n```\r\n\r\n\u7528\u6237\u4e0d\u60f3\u8981\u5b57\u7b26\u4e32\u5e26\u65f6\u533a\r\n```\r\n>>> NbTime(datetime_formatter=NbTime.FORMATTER_DATETIME_NO_ZONE) \r\n<NbTime [2024-02-29 18:12:18]>\r\n```\r\n\r\n## 4.2 NBTime\u5168\u5c40\u8bbe\u7f6e\u5b57\u7b26\u4e32\u683c\u5f0f\r\n\r\nNbTime.set_default_formatter \u53ef\u4ee5\u5168\u5c40\u8bbe\u7f6e\u65f6\u95f4\u683c\u5f0f\u5b57\u7b26\u4e32,\u5c31\u4e0d\u9700\u8981\u6bcf\u6b21\u90fd\u4f20\u9012\u683c\u5f0f\r\n```\r\n>>> NbTime.set_default_formatter(NbTime.FORMATTER_DATETIME_NO_ZONE)\r\n>>> NbTime()\r\n<NbTime [2024-02-29 18:14:38]>\r\n```\r\n\r\n# 5 NbTime \u5bf9\u8c61\u5185\u7f6e\u7684\u6210\u5458\u5c5e\u6027\r\n\r\n\u89c1\u4e0b\u9762\u7684\u4ea4\u4e92,NbTime\u7c7b\u578b\u5bf9\u8c61\u6709\u975e\u5e38\u4fbf\u6377\u7684\u5404\u79cd\u6210\u5458\u53d8\u91cf,\r\n\r\n```\r\ndatetime \u7c7b\u578bdatetime.datetime\u7c7b\u578b\u7684\u65f6\u95f4\u5bf9\u8c61,\u8fd9\u4e2a\u5f88\u65b9\u4fbf\u548c\u5185\u7f6e\u7c7b\u578b\u5173\u8054\u8d77\u6765\r\ntime_zone_obj \u65f6\u533a\r\ndatetime_str \u65e5\u671f\u65f6\u95f4\u5b57\u7b26\u4e32\r\ntime_str \u65f6\u95f4\u5b57\u7b26\u4e32\r\ndate_str \u65e5\u671f\u5b57\u7b26\u4e32\r\ntimestamp \u65f6\u95f4\u6233\u79d2\r\ntimestamp_millisecond \u65f6\u95f4\u6233\u6beb\u79d2\r\ntoday_zero_timestamp \u5f53\u5929\u51cc\u6668\u7684\u65f6\u95f4\u6233\r\n```\r\n\r\n```\r\n>>> nbt=NbTime()\r\n>>> nbt.datetime\r\ndatetime.datetime(2024, 2, 29, 18, 16, 23, 541415, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)\r\n\r\n>>> nbt.time_zone_obj\r\n<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>\r\n\r\n>>> nbt.datetime_str\r\n'2024-02-29 18:16:23'\r\n\r\n>>> nbt.time_str\r\n'18:16:23'\r\n\r\n>>> nbt.date_str\r\n'2024-02-29'\r\n\r\n>>> nbt.timestamp\r\n1709201783.541415\r\n\r\n>>> nbt.timestamp_millisecond\r\n1709201783541.415\r\n\r\n>>> nbt.today_zero_timestamp\r\n1709136000\r\n\r\n```\r\n\r\n# 6 NbTime\u7684\u65b9\u6cd5\r\n\r\n## 6.1 get_str \u65b9\u6cd5\u8f6c\u5316\u6210\u4efb\u610f\u5b57\u7b26\u4e32\u683c\u5f0f\r\n```\r\n\u4f8b\u5982\u83b7\u53d6\u4eca\u5929\u7684\u5e74\u6708\u65e5,\u4e2d\u95f4\u4e0d\u8981\u5e26 - \r\n>>> NbTime().get_str('%Y%m%d')\r\n20240301\r\n```\r\n\r\n## 6.2 shift \u662f\u8ba1\u7b97\u751f\u6210\u65b0\u7684NbTime\u5bf9\u8c61,\u652f\u6301\u65e0\u9650\u8fde\u7eed\u94fe\u5f0f\u64cd\u4f5c\r\n```\r\n\u6c423\u59291\u5c0f\u65f610\u5206\u949f\u540e\u7684\u65f6\u95f4,\u5165\u53c2\u652f\u6301\u6b63\u6570\u548c\u8d1f\u6570\r\n>>> NbTime().shift(hours=1,minutes=10).shift(days=3)\r\n<NbTime [2024-03-03 19:02:49 +0800]>\r\n```\r\n\r\n## 6.3 to_tz \u662f\u751f\u6210\u65b0\u7684\u65f6\u533a\u7684NbTime\u5bf9\u8c61,\u628aNbTime\u5bf9\u8c61\u8f6c\u5316\u6210\u53e6\u4e00\u4e2a\u65f6\u533a.\r\n```\r\n\u4e00\u4e2a\u4e1c7\u533a\u7684\u65f6\u95f4:\r\n>>> NbTime('2024-02-26 15:58:21',datetime_formatter=NbTime.FORMATTER_DATETIME,time_zone=NbTime.TIMEZONE_EASTERN_7)\r\n<NbTime [2024-02-26 15:58:21 +0700]>\r\n\r\n\u90a3\u8fd9\u4e2a\u4e1c7\u533a\u7684\u65f6\u95f4\u8f6c\u5316\u6210\u4e1c8\u533a\u7684\u65f6\u95f4:\r\n>>> NbTime('2024-02-26 15:58:21',datetime_formatter=NbTime.FORMATTER_DATETIME,time_zone=NbTime.TIMEZONE_EASTERN_7).to_tz('UTC+8')\r\n<NbTime [2024-02-26 16:58:21 +0800]>\r\n```\r\n## 6.4 NbTime \u5bf9\u8c61 \u652f\u6301 > < = \u6bd4\u8f83\r\n```\r\nNbTime \u5b9e\u73b0\u4e86 __gt__ __lt__ __eq__ \u65b9\u6cd5,\u53ef\u4ee5\u76f4\u63a5\u6bd4\u8f83\u5927\u5c0f\r\n\r\n>>> NbTime() > NbTime('2023-05-06 01:01:01') \r\nTrue\r\n>>> NbTime() > NbTime('2025-05-06 01:01:01') \r\nFalse\r\n\r\n```\r\n\r\n# 7.\u7528\u6237\u81ea\u5b9a\u4e49\u7ee7\u627f NbTime \u7c7b\r\n\r\n\u56e0\u4e3a nb_time \u662f oop\u9762\u5411\u5bf9\u8c61\u5f00\u53d1\u7684,\u6240\u4ee5\u53ef\u4ee5\u7ee7\u627f,\r\n\u5982\u679c\u662f\u9762\u5411\u8fc7\u7a0b\u7f16\u7a0b,\u4f7f\u7528\u6a21\u5757\u7ea7 + \u51fd\u6570\u7684\u65b9\u5f0f\u6765\u7f16\u7a0b,\u5148\u6539\u53d8\u6a21\u5757\u7684\u67d0\u4e2a\u5168\u5c40\u53d8\u91cf\u6216\u8005\u51fd\u6570\u903b\u8f91,\u53ea\u80fd\u4f7f\u7528\u7334\u5b50\u8865\u4e01\u6280\u672f,\u800c\u4e14\u6a21\u5757\u5929\u7136\u8fd8\u662f\u4e2a\u5355\u4f8b,\u4e0d\u9002\u5408\u591a\u6b21\u7334\u5b50\u8865\u4e01\r\n\u9762\u5411\u5bf9\u8c61\u5c31\u662f\u6709\u4f18\u52bf.\r\n\r\n\r\n## 7.1 \u4f8b\u5982\u7528\u6237\u60f3\u4f7f\u7528 UTC 0\u65f6\u533a,\u4f46\u662f\u4e0d\u60f3\u9891\u7e41\u4f20\u9012 \u65f6\u533a\u5165\u53c2,\u53ef\u4ee5\u4f7f\u7528 nb_time\u7684 \u81ea\u5e26\u7684UtcNbTime \u7c7b,\u6216\u8005\u7528\u6237\u624b\u5199\u8fd9\u4e2a\u7c7b\u81ea\u5df1\u7ee7\u627fNbTime\r\n\r\n```python\r\nclass UtcNbTime(NbTime):\r\n default_time_zone = NbTime.TIMEZONE_UTC\r\n\r\n# \u4f7f\u7528\u7684\u65f6\u5019\r\nUtcNbTime() \r\n```\r\n\r\n\r\n## 7.2 \u4f8b\u5982 \u7528\u6237\u60f3\u4f7f\u7528\u4e0a\u6d77\u65f6\u533a,\u5e76\u4e14\u9ed8\u8ba4\u4f7f\u7528\u4e0d\u5e26\u65f6\u533a\u7684\u65f6\u95f4\u5b57\u7b26\u4e32\u683c\u5f0f\u5316\r\n```python\r\nclass ShanghaiNbTime(NbTime):\r\n default_time_zone = NbTime.TIMEZONE_ASIA_SHANGHAI\r\n default_formatter = NbTime.FORMATTER_DATETIME_NO_ZONE\r\n\r\n# \u4f7f\u7528\u7684\u65f6\u5019\r\nShanghaiNbTime() \r\n```\r\n\r\n## 7.3 \u6570\u636e\u5206\u6790,\u5e38\u7528\u7684\u65f6\u95f4\u4e5f\u53ef\u4ee5\u52a0\u4e0a\u6765\r\n\r\n```python\r\nclass PopularNbTime(NbTime):\r\n @property\r\n def ago_1_days(self):\r\n return self.shift(days=-1)\r\n\r\n @property\r\n def ago_7_days(self):\r\n return self.shift(days=-7)\r\n\r\n @property\r\n def ago_30_days(self):\r\n return self.shift(days=-30)\r\n\r\n @property\r\n def ago_180_days(self):\r\n return self.shift(days=-180)\r\n```\r\n\r\n\r\n\r\n# 8 NbTime\u603b\u7ed3\r\n\r\n```\r\n\u603b\u7ed3\u5c31\u662f NbTime \u7684\u5165\u53c2\u63a5\u53d7\u6240\u6709\u7c7b\u578b,NbTime\u652f\u6301\u94fe\u5f0f\u8c03\u7528,Nbtime\u65b9\u4fbf\u652f\u6301\u65f6\u533a,Nbtime\u65b9\u4fbf\u64cd\u4f5c\u65f6\u95f4\u8f6c\u5316,\r\n\u6240\u4ee5NbTime\u64cd\u4f5c\u65f6\u95f4,\u8fdc\u8fdc\u66b4\u51fb\u4f7f\u7528datetime\u548c\u4e09\u65b9arrow\u5305,\r\n\u8fdc\u8fdc\u66b4\u51fb\u7528\u6237\u5728 utils.time_utils.py\u6587\u4ef6\u4e2d\u5199\u51e0\u767e\u4e2a\u5b64\u7acb\u7684\u9762\u5411\u8fc7\u7a0b\u64cd\u4f5c\u65f6\u95f4\u7684\u51fd\u6570.\r\n```\r\n",
"bugtrack_url": null,
"license": "BSD License",
"summary": "Awesome time conversion handling with support for chaining operations.",
"version": "2.2",
"project_urls": {
"Homepage": "https://github.com/ydf0509/nb_time"
},
"split_keywords": [
"arrow",
" time",
" datetime",
" time_utils"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f124d46c2896e8672c94805b78b7ed8867fa197db04875aa397bc9a11aaeb98c",
"md5": "fa5c9c87e06eaff1ed691eb2c384d681",
"sha256": "226c79cb238b23089cb2de416ad5d2ed31d738ce96d8436e32c80bd21d2b1324"
},
"downloads": -1,
"filename": "nb_time-2.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fa5c9c87e06eaff1ed691eb2c384d681",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 9989,
"upload_time": "2024-11-26T08:22:49",
"upload_time_iso_8601": "2024-11-26T08:22:49.273380Z",
"url": "https://files.pythonhosted.org/packages/f1/24/d46c2896e8672c94805b78b7ed8867fa197db04875aa397bc9a11aaeb98c/nb_time-2.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dc49ce69434437d4e52cc37e046287e3e618a5a1760f4740df4db66e1f6a0361",
"md5": "a87fc6cfeb1d23731f2868f2c5fe8be6",
"sha256": "3ecf418ec12ed9a050da575875bf8f94c02e3685b835accd786bfb71ae8682ec"
},
"downloads": -1,
"filename": "nb_time-2.2.tar.gz",
"has_sig": false,
"md5_digest": "a87fc6cfeb1d23731f2868f2c5fe8be6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10483,
"upload_time": "2024-11-26T08:22:50",
"upload_time_iso_8601": "2024-11-26T08:22:50.554620Z",
"url": "https://files.pythonhosted.org/packages/dc/49/ce69434437d4e52cc37e046287e3e618a5a1760f4740df4db66e1f6a0361/nb_time-2.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-26 08:22:50",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ydf0509",
"github_project": "nb_time",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "nb-time"
}