日期和时间


使用场景

文件属性  数据库  页面UI显示  定时  日志

相关概念

时间戳(timestamp)

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据

时区(Time Zone)

世界各地区与国家经度不同,地方时也有所不同。正式的时区划分,其中包括24个时区,每一时区由一个英文字母表示。

地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早。东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算,这给人们带来不便。

为了克服时间上的混乱,1884年在华盛顿召开的一次国际经度会议(又称国际子午线会议)上,规定将全球划分为24个时区(东、西各12个时区)。规定英国(格林尼治天文台旧址)为中时区(零时区)、东1-12区,西1-12区。

 

如何计算区时

计算的区时=已知区时-(已知区时的时区-要计算区时的时区),(注:东时区为正,西时区为负)。 下面举例加以说明:

例1:已知东京(东九区)时间为5月1日12:00,求北京(东八区)的区时?北京时间=12:00-(9-8)=11:00(即北京时间为5月1日11:00)。

例2:已知北京时间为5月1日12:00,求伦敦(中时区)的区时?伦敦时间=12:00-(8-0)=4:00(即伦敦时间为5月1日4:00)。

 

UTC

协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。

协调世界时(UTC)正式形成于1960年国际无线电咨询委员会的374号建议中[5],该建议由多国时间实验室共同提出。人们对该时间系统进行过数次调整,直到1972年引入了闰秒机制,调整工作得以简化。

如果本地时间比UTC时间快,例如中国大陆、香港、澳门、台湾、蒙古国、新加坡、马来西亚、澳大利亚西部的时间比UTC快8小时,就会写作UTC+8,俗称东八区。相反,如果本地时间比UTC时间慢,例如夏威夷的时间比UTC时间慢10小时,就会写作UTC-10,俗称西十区。

 

常用时间模块有哪些?

time

datetime

python-dateutil (pip install)

 

常用操作:

时间各种格式表示  各种加减运算

import time
import random
import datetime
from datetime import datetime
from datetime import date
from datetime import time as dtime
from datetime import timedelta
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *  # MO , TU , WE , TH , FR , SA , SU
from dateutil import parser

now = time.time()  # 获取当前时间戳

"""计算程序运行时间"""
start = time.time()

for i in range(10000):
    print(i)

end = time.time() - start
print(end)

"""控制程序执行间隔 time.sleep()下雪了效果"""
for i in range(10):
    print("*".rjust(random.randint(1, 20)))
    time.sleep(0.5)

t1 = time.localtime()  # 结构化时间
print(t1)
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=23, tm_hour=13, tm_min=47, tm_sec=19, tm_wday=2, tm_yday=143, tm_isdst=0)

t2 = time.localtime(1555555555)
print(t2)  # 2019年4月18日10时45分55秒

t3 = time.mktime(time.localtime())  # 结构化时间还原时间戳

print(t3)

print(time.strftime('%Y-%m-%d %X', time.localtime()))  # 格式化转为可阅读的
print(time.strptime('2018-5-4 13:04:13', '%Y-%m-%d %X'))  # 可阅读的转为格式化

now = datetime.now()  # 获取当前时间 返回格式为可阅读的

print(f'{now:%Y-%m-%d %X}')  # 格式化
print(str(now))
print(time.strptime(str(now).split('.')[0], '%Y-%m-%d %X'))  # 日期时间还原成格式化
print(time.mktime(time.strptime(str(now).split('.')[0],
                                '%Y-%m-%d %X')))  # 还原为时间戳

today = date.today()  # 只获取日期
print(today)
# t = time(12, 4, 5) # 根据参数返回时间
# print(t)

t1 = timedelta(days=1, hours=5)  # 创建间隔时间
print(t1)

t2 = date.today() + t1
print(t2)

t_time = datetime.utcfromtimestamp(15555555555)  # 时间戳转换为日期
print(t_time)

dt = datetime(2018, 5, 24, 10, 55, 12)  # 根据参数生成时间
print(dt.strftime('%Y/%m/%d %X'))  # 格式化
print(dt.strptime('2018/5/24 10:55:12', '%Y/%m/%d %X'))  # 格式化还原

datetime.now() - timedelta(hours=1)  # 过去1小时的时间

dt = datetime.now()
"""
    dateutil 的使用


    使用dateutil更好控制日期

    pip install python-dateutil
    https://dateutil.readthedocs.io/en/stable/examples.html#relativedelta-examples
    timedelta不够用, 处理跨星期,跨月,跨年的计算麻烦
    class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

"""

print(dt + relativedelta(weekday=WE, weeks=+1))
# 过一个月是几号

da = date.today()
da = date(2018, 1, 30)
print(da + relativedelta(months=+1))
# 一年前

print(da + relativedelta(years=-1))


def date_base_format(self, from_datetime):  # 转换时间
    datetime_f = parser.parse(from_datetime)
    datetime_fstr = datetime_f.strftime('%Y-%m-%d %X')
    return datetime_f, datetime_fstr


最后更新于:2018-07-11 20:38:46