pyefun.核心支持库.日期时间操作 源代码

"""

.. Hint::
    日期时间操作 符合中国人思维逻辑的日期时间操作实用函数


.. literalinclude:: ../../../pyefun/核心支持库/日期时间操作_test.py
    :language: python
    :caption: 代码示例
    :linenos:

"""

import time
import pendulum
import copy
from .文本操作 import *


[文档]def 时间_设置语言包(名称="zh"): pendulum.set_locale(名称)
# 文档 # https://pendulum.eustace.io/docs/#instantiation
[文档]class 日期时间: t = pendulum.DateTime def __init__(self, str="now"): pass if (type(str) == int): self.t = pendulum.from_timestamp(str, tz='Asia/Shanghai') elif (str != ""): self.t = pendulum.parse(str)
[文档] def 到文本(self, format="YYYY-MM-DD HH:mm:ss"): return self.t.format(format)
[文档] def 取时间戳(self): return self.t.int_timestamp
[文档] def 取日期(self): return self.t.to_date_string()
[文档] def 取年(self): return self.t.year
[文档] def 取月(self): return self.t.month
[文档] def 取日(self): return self.t.day
[文档] def 取小时(self): return self.t.hour
[文档] def 取分钟(self): return self.t.minute
[文档] def 取秒(self): return self.t.second
[文档] def 取微妙(self): return self.t.microsecond
[文档] def 取每周的第几天(self): return self.t.day_of_week
[文档] def 取每年的第几天(self): return self.t.day_of_year
[文档] def 取每月的第几周(self): return self.t.week_of_month
[文档] def 取每年的第几周(self): return self.t.week_of_year
[文档] def 取月天数(self): return self.t.days_in_month
[文档] def 设置年月日(self, year=None, month=None, day=None): self.t = self.t.on(year=int(year), month=int(month), day=int(day)) return self
[文档] def 设置时分秒(self, hour=0, minute=0, second=0): self.t = self.t.at(hour, minute, second) return self
[文档] def 增减日期时间(self, years=0, months=0, weeks=0, days=0, hours=0, minutes=0, seconds=0): self.t = self.t.add(years=years, months=months, weeks=weeks, days=days, hours=hours, minutes=minutes, seconds=seconds, ) return self
[文档] def 取时间间隔(self, datetime): d = self.t.diff(datetime, abs=False) return { "years": d.in_years(), "months": d.in_months(), "days": d.in_days(), "hours": d.in_hours(), "minutes": d.in_minutes(), "seconds": d.in_seconds(), "weeks": d.in_weeks(), }
[文档] def 取友好时间(self): d = self.t.diff_for_humans() return d
[文档] def datetime(self): return self.t
[文档] def copy(self): return copy.deepcopy(self)
def __str__(self): return self.到文本()
[文档]def 取现行时间戳(): return int(time.time())
[文档]def 日期到时间戳(str="now"): return 日期时间(str).取时间戳()
[文档]def 取现行时间(): t = 日期时间() return t
[文档]def 取现行时间2(格式, 自定义=False): """ 自定义 %Y-%m-%d %H:%M:%S (yyyy-MM-dd HH:mm:ss)这种格式不可以 格式1 = 2020-10-09 22:11:52 格式2 = 2020-10-09 格式3= 22:13:37 格式4= 2020年10月17日18时27分40秒 %a # 本地(local) 简化星期名称 %A # 本地完整星期名称 %b # 本地简化月份名称 %B # 本地完整月份名称 %c # 本地相应的日期和时间表示 %d # 一个月中的第几天(01-31) %H # 一天中的第几个小时(24小时制00-23) %I # 第几个小时(12小时制01-12) %j # 一年中的第几天(001-366) %m # 月份(01-12) %M # 分钟数(00-59) %p # 本地am或pm的相应符 %S # 秒(01-60) %U # 一年中的星期数。(00-53 星期天是一个星期的开始)第一个星期天之前的所有天数都放在第0周 %w # 一个星期中的第几天(0-6 0是星期天) %W # 和%U基本相同,不同的是%W以星期一为一个星期的开始 %x # 本地相应日期 %X # 本地相应时间 %y # 去掉世纪的年份(00-99) %Y # 完整的年份 %z # 时区的名字 """ if 自定义: return time.strftime(格式, time.localtime()) # 2020-10-09 22:11:52 if 格式 == 1: return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 2020-10-09 22:11:52 elif 格式 == 2: return time.strftime("%Y-%m-%d", time.localtime()) # 2020-10-09 elif 格式 == 3: return time.strftime("%H:%M:%S", time.localtime()) # 22:13:37 elif 格式 == 4: return time.strftime("%Y{}%m{}%d{}%H{}%M{}%S{}", time.localtime()).format('年', '月', '日', '时', '分', '秒') # 2020年10月17日18时27分40秒
[文档]def now(): t = 日期时间() return t
[文档]def 创建日期时间(timestr): t = 日期时间(timestr) return t
[文档]def 时间迭代(start, end): """ 为支持单位range()有:years,months,weeks, days,hours,minutes和seconds for i in list.range('months'): print(i.to_datetime_string()) """ return pendulum.period(pendulum.parse(start), pendulum.parse(end))
[文档]def date(format, timestr="now"): t = 创建日期时间(timestr) format = 子文本替换(format, "Y", str(t.取年())) format = 子文本替换(format, "m", str(t.取月())) format = 子文本替换(format, "d", str(t.取日())) format = 子文本替换(format, "H", str(t.取小时())) format = 子文本替换(format, "i", str(t.取分钟())) format = 子文本替换(format, "s", str(t.取秒())) return format