zoukankan      html  css  js  c++  java
  • 彻底掌握Python日期时间处理

    • 使用 time 模块展示当前日期和时间

    • 将天、小时、分钟转换为秒

    • 使用 Pandas 获取当前日期和时间

    • 将字符串转换为日期时间对象

    • 以毫秒为单位获取当前时间

    • 以 MST、EST、UTC、GMT 和 HST 获取当前日期时间

    • 从给定的日期当中获取星期几

    • 计算两个日期时间对象之间的时差

    • 将 5 分钟添加到 Unix 时间戳

    • 在 Python 中遍历一系列日期

    • 巴黎时间更改为纽约时间

    • 使用 Python 获得最后7个工作日

    • 从今天的日期和一个人的生日推算年龄

    • 获得本月的第一个星期二

    • 将整数转换为日期对象

    • 当前日期减去 N 天的天数

    • 比较两个日期

    • 从 datetime 对象中提取年份

    • 在 Python 中找到星期几

    • 从当前日期获取 7 天前的日期

    • 将两个日期时间对象之间的差值转换为秒

    • 获得任何一个月的第三个星期五

    • 从 Python 中的周数获取日期

    • 获取特定日期的工作日

    • 创建一个 15 分钟前的 DateTime

    • 从特定日期获取周的开始和结束日期

    • 两个日期之间的差异(以秒为单位)

    • 以这种格式获取昨天的日期MMDDYY

    • 从今天的日期获取上周三

    • 所有可用时区的列表打印

    • 获取指定开始日期和结束日期之间的日期范围

    • 毫秒转换为数据

    • 查找给定日期之后的第一个星期日的日期

    • 将(Unix)时间戳秒转换为日期和时间字符串

    • 以月为单位的两个日期之间的差异

    • 将本地时间字符串转换为 UTC

    • 获取当月的最后一个星期四

    • 从特定日期查找一年中的第几周

    • 从给定日期获取星期几

    • 用 AM PM 打印当前时间

    • 获得一个月的最后一天

    • 从工作日值中获取工作日名称

    • 将 N 小时数添加到当前日期时间

    • 从当前日期获取年、月、日、小时、分钟

    • 获取特定月份和年份的最后一个星期日

    • 查找特定日期的年份中的哪一天

    • 查找当前日期是工作日还是周末

    • 组合 datetime.date 和 datetime.time 对象

    • 获得每月的第 5 个星期一

    • 将日期时间对象转换为日期对象

    • 获取没有微秒的当前日期时间

    • 将 N 秒数添加到特定日期时间

    • 从当前日期获取两位数的月份和日期

    • 从特定日期获取月份数据的开始和结束日期

    • 以周为单位的两个日期之间的差异

    • 将字符串格式的日期转换为 Unix 时间戳

    • 获取最后一个周日和周六的日期

    • 检查对象是否属于 datetime.date 类型

    • 获取特定日期的周数

    • 获取 UTC 时间

    • 获取本周的开始和结束日期

    • 两个日期之间的差异(以分钟为单位)

    • 将日期时间对象转换为日期字符串

    • 获得上周五

    • 将 3 周添加到任何特定日期

    • 在其他两个日期之间生成一个随机日期

    • 查找从今天开始的第一个星期一的日期

    • 两个日期之间的差异(以天为单位)

    • 向当前日期添加六个月

    • 将数据时间对象转换为 Unix(时间戳)

    • 将年、月、日、时、分、秒的 N 个数字添加到当前日期时间

    • 获取指定开始日期和结束日期之间的日期范围

    • 减去 N 个年、月、日、时、分、秒到当前日期时间

    • 获取指定年份和月份的月份第一天的工作日和月份的天数

    • 打印特定年份的所有星期一

    • 打印特定年份的日历

    • 从月份编号中获取月份名称

    • 从给定日期获取一周的开始和结束日期

    • 根据当前日期查找上一个和下一个星期一的日期

    • 获取当前季度的第一个日期和最后一个日期

    1使用 time 模块展示当前日期和时间
    import time
    from time import gmtime, strftime
     
    t = time.localtime()
    print (time.asctime(t))
    print(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()))
    print(strftime("%A", gmtime()))
    print(strftime("%D", gmtime()))
    print(strftime("%B", gmtime()))
    print(strftime("%y", gmtime()))
     
    # Convert seconds into GMT date
    print(strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime(1234567890)))
    Output:
    
    Sun May 7 09:30:37 2017
    Sun, 07 May 2017 04:00:37 +0000
    Sunday
    05/07/17
    May
    17
    Fri, 13 Feb 2009 23:31:30 +0000
    2将天、小时、分钟转换为秒
    SECONDS_PER_MINUTE  = 60
    SECONDS_PER_HOUR    = 3600
    SECONDS_PER_DAY     = 86400
     
    #Read the inputs from user
    days    = int(input("Enter number of Days: "))
    hours   = int(input("Enter number of Hours: "))
    minutes = int(input("Enter number of Minutes: "))
    seconds = int(input("Enter number of Seconds: "))
     
    #Calculate the days, hours, minutes and seconds
    total_seconds = days * SECONDS_PER_DAY
    total_seconds = total_seconds + ( hours * SECONDS_PER_HOUR)
    total_seconds = total_seconds + ( minutes * SECONDS_PER_MINUTE)
    total_seconds = total_seconds + seconds
     
    #Display the result
    print("Total number of seconds: ","%d"%(total_seconds))
    Output:
    
    Enter number of Days: 5
    Enter number of Hours: 36
    Enter number of Minutes: 24
    Enter number of Seconds: 15
    Total number of seconds: 563055
    3使用 Pandas 获取当前日期和时间
    import pandas as pd
    print(pd.datetime.now())
    print(pd.datetime.now().date())
    print(pd.datetime.now().year)
    print(pd.datetime.now().month)
    print(pd.datetime.now().day)
    print(pd.datetime.now().hour)
    print(pd.datetime.now().minute)
    print(pd.datetime.now().second)
    print(pd.datetime.now().microsecond)
    Output:
    
    2018-01-19 16:08:28.393553
    2018-01-19
    2018
    1
    19
    16
    8
    28
    394553
    4将字符串转换为日期时间对象
    from datetime import datetime
    from dateutil import parser
    
    d1 = "Jan 7 2015  1:15PM"
    d2 = "2015 Jan 7  1:33PM"
    
    # If you know date format
    date1 = datetime.strptime(d1, '%b %d %Y %I:%M%p')
    print(type(date1))
    print(date1)
    
    # If you don't know date format
    date2 = parser.parse(d2)
    print(type(date2))
    print(date2)
    Output:
    
    class 'datetime.datetime'
    2015-01-07 13:15:00
    
    class 'datetime.datetime'
    2015-01-07 13:33:00
    5以毫秒为单位获取当前时间
    import time
     
    milliseconds = int(round(time.time() * 1000))
    print(milliseconds)
    Output:
    
    1516364270650
    6以 MST、EST、UTC、GMT 和 HST 获取当前日期时间
    from datetime import datetime
    from pytz import timezone
     
    mst = timezone('MST')
    print("Time in MST:", datetime.now(mst))
     
    est = timezone('EST')
    print("Time in EST:", datetime.now(est))
     
    utc = timezone('UTC')
    print("Time in UTC:", datetime.now(utc))
     
    gmt = timezone('GMT')
    print("Time in GMT:", datetime.now(gmt))
     
    hst = timezone('HST')
    print("Time in HST:", datetime.now(hst))
    Output:
    
    Time in MST: 2017-01-19 06:06:14.495605-07:00
    Time in EST: 2017-01-19 08:06:14.496606-05:00
    Time in UTC: 2017-01-19 13:06:14.496606+00:00
    Time in GMT: 2017-01-19 13:06:14.496606+00:00
    Time in HST: 2017-01-19 03:06:14.497606-10:00
    7从给定的日期当中获取星期几
    import datetime
     
    dayofweek = datetime.date(2010, 6, 16).strftime("%A")
    print(dayofweek)
    # weekday Monday is 0 and Sunday is 6
    print("weekday():", datetime.date(2010, 6, 16).weekday())
     
    # isoweekday() Monday is 1 and Sunday is 7
    print("isoweekday()", datetime.date(2010, 6, 16).isoweekday())
     
    dayofweek = datetime.datetime.today().strftime("%A")
    print(dayofweek)
    print("weekday():", datetime.datetime.today().weekday())
    print("isoweekday()", datetime.datetime.today().isoweekday())
    Output:
    
    Wednesday
    weekday(): 2
    isoweekday() 3
    Friday
    weekday(): 4
    isoweekday() 5
    8计算两个日期时间对象之间的时差
    import datetime
    from datetime import timedelta
     
    datetimeFormat = '%Y-%m-%d %H:%M:%S.%f'
    date1 = '2016-04-16 10:01:28.585'
    date2 = '2016-03-10 09:56:28.067'
    diff = datetime.datetime.strptime(date1, datetimeFormat)\
        - datetime.datetime.strptime(date2, datetimeFormat)
     
    print("Difference:", diff)
    print("Days:", diff.days)
    print("Microseconds:", diff.microseconds)
    print("Seconds:", diff.seconds)
    Output:
    
    Difference: 37 days, 0:05:00.518000
    Days: 37
    Microseconds: 518000
    Seconds: 300
    9将 5 分钟添加到 Unix 时间戳
    import datetime
    import calendar
     
    future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
    print(calendar.timegm(future.timetuple()))
    Output:
    
    1621069619
    10在 Python 中遍历一系列日期
    import datetime
    
    start = datetime.datetime.strptime("21-06-2020", "%d-%m-%Y")
    end = datetime.datetime.strptime("05-07-2020", "%d-%m-%Y")
    date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end - start).days)]
    
    for date in date_generated:
        print(date.strftime("%d-%m-%Y"))
    Output:
    
    21-06-2020
    22-06-2020
    23-06-2020
    24-06-2020
    25-06-2020
    26-06-2020
    27-06-2020
    28-06-2020
    29-06-2020
    30-06-2020
    01-07-2020
    02-07-2020
    03-07-2020
    04-07-2020
    11巴黎时间更改为纽约时间
    import pendulum
     
    in_paris = pendulum.datetime(2016, 8, 7, 22, 24, 30, tz='Europe/Paris')
    print(in_paris)
     
    in_us = in_paris.in_timezone('America/New_York')
    print(in_us)
    Output:
    
    2016-08-07T22:24:30+02:00
    2016-08-07T16:24:30-04:00
    12使用 Python 获得最后7个工作日
    from datetime import date
    from datetime import timedelta
     
    today = date.today()
     
    for i in range(7):
        d = today - timedelta(days=i)
        if d.weekday() < 5:
            print(d)
    Output:
    
    2021-05-18
    2021-05-17
    2021-05-14
    2021-05-13
    2021-05-12
    13从今天的日期和一个人的生日推算年龄
    from datetime import date
     
     
    def calculate_age(born):
        today = date.today()
        try:
            birthday = born.replace(year=today.year)
        except ValueError:
            birthday = born.replace(year=today.year, month=born.month + 1, day=1)
        if birthday > today:
            return today.year - born.year - 1
        else:
            return today.year - born.year
     
     
    print(calculate_age(date(2001, 3, 1)))
    Output:
    
    20
    14获得本月的第一个星期二
    import calendar
    from datetime import datetime
     
    c = calendar.Calendar(firstweekday=calendar.SUNDAY)
    monthcal = c.monthdatescalendar(datetime.today().year, datetime.today().month)
     
    try:
        tues = [day for week in monthcal for day in week if
                day.weekday() == calendar.TUESDAY and day.month == datetime.today().month][0]
        print(tues)
    except IndexError:
        print('No date found')
    Output:
    
    2021-05-04
    15将整数转换为日期对象
    from datetime import datetime
    
    i = 1545730073
    timestamp = datetime.fromtimestamp(i)
    
    print(timestamp)
    print(type(timestamp))
    Output:
    
    2018-12-25 14:57:53
    16当前日期减去 N 天的天数
    from datetime import datetime, timedelta
    
    d = datetime.today() - timedelta(days=5)
    print(d)
    Output:
    
    2021-05-10 12:59:14.867969
    17比较两个日期
    import datetime
    
    a = datetime.datetime(2020, 12, 31, 23, 59, 59)
    b = datetime.datetime(2020, 11, 30, 23, 59, 59)
    
    print(a < b)
    print(a > b)
    Output:
    
    False
    True
    18从 datetime 对象中提取年份
    import datetime
     
    year = datetime.date.today().year
    print(year)
    Output:
    
    2021
    19在 Python 中找到星期几
    import pendulum
     
    dt = pendulum.parse('2021-05-18')
    print(dt.day_of_week)
     
    dt = pendulum.parse('2021-05-01')
    print(dt.day_of_week)
     
    dt = pendulum.parse('2021-05-21')
    print(dt.day_of_week)
    Output:
    
    2
    6
    5
    20从当前日期获取 7 天前的日期
    from datetime import datetime, timedelta
     
    now = datetime.now()
     
    for x in range(7):
        d = now - timedelta(days=x)
        print(d.strftime("%Y-%m-%d"))
    Output:
    
    2021-05-18
    2021-05-17
    2021-05-16
    2021-05-15
    2021-05-14
    2021-05-13
    2021-05-12
    21将两个日期时间对象之间的差值转换为秒
    import datetime
     
    time1 = datetime.datetime.strptime('19 01 2021', '%d %m %Y')
    time2 = datetime.datetime.strptime('25 01 2021', '%d %m %Y')
     
    difference = time2 - time1
    print(difference)
     
    seconds = difference.total_seconds()
    print(seconds)
    Output:
    
    6 days, 0:00:00
    518400.0
    22获得任何一个月的第三个星期五
    import calendar
     
    c = calendar.Calendar(firstweekday=calendar.SUNDAY)
    year = 2021
    month = 5
    monthcal = c.monthdatescalendar(year, month)
     
    try:
        third_friday = [day for week in monthcal for day in week if
                        day.weekday() == calendar.FRIDAY and day.month == month][2]
        print(third_friday)
    except IndexError:
        print('No date found')
    Output:
    
    2021-05-21
    23从 Python 中的周数获取日期
    import datetime
    from dateutil.relativedelta import relativedelta
     
    week = 25
    year = 2021
    date = datetime.date(year, 1, 1) + relativedelta(weeks=+week)
    print(date)
    Output:
    
    2021-06-25
    24获取特定日期的工作日
    import datetime
     
    print(datetime.date(2020, 5, 15).isocalendar()[2])
    Output:
    
    5
    25创建一个 15 分钟前的 DateTime
    import datetime
     
    dt = datetime.datetime.now() - datetime.timedelta(minutes=15)
    print(dt)
    Output:
    
    2021-05-15 22:25:55.897365
    26从特定日期获取周的开始和结束日期
    import pendulum
     
    dt = pendulum.datetime(2012, 9, 5)
     
    start = dt.start_of('week')
    print(start.to_datetime_string())
     
    end = dt.end_of('week')
    print(end.to_datetime_string())
    Output:
    
    2012-09-03 00:00:00
    2012-09-09 23:59:59
    27两个日期之间的差异(以秒为单位)
    from datetime import datetime
     
    fmt = '%Y-%m-%d %H:%M:%S'
    d1 = datetime.strptime('2020-01-01 17:31:22', fmt)
    d2 = datetime.strptime('2020-01-03 17:31:22', fmt)
     
    days_diff = d2 - d1
    print(days_diff.days * 24 * 60 * 60)
    Output:
    
    172800
    28以这种格式获取昨天的日期MMDDYY
    from datetime import date, timedelta
     
    yesterday = date.today() - timedelta(days=1)
    print(yesterday.strftime('%m%d%y'))
    Output:
    
    051421
    29从今天的日期获取上周三
    from datetime import date
    from datetime import timedelta
    
    today = date.today()
    
    offset = (today.weekday() - 2) % 7
    wednesday = today - timedelta(days=offset)
    print(wednesday)
    Output:
    
    2021-05-12
    30所有可用时区的列表打印
    import pytz
    
    for i in pytz.all_timezones:
        print(i)
    Output:
    
    Africa/Abidjan
    Africa/Accra
    Africa/Addis_Ababa
    Africa/Algiers
    Africa/Asmara
    Africa/Asmera
    Africa/Bamako
    Africa/Bangui
    Africa/Banjul
    Africa/Bissau
    ...
    US/Mountain
    US/Pacific
    US/Samoa
    UTC
    Universal
    W-SU
    WET
    Zulu
    31获取指定开始日期和结束日期之间的日期范围
    import datetime
     
    start = datetime.datetime.strptime("21-06-2020", "%d-%m-%Y")
    end = datetime.datetime.strptime("05-07-2020", "%d-%m-%Y")
    date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end - start).days)]
     
    for date in date_generated:
        print(date.strftime("%d-%m-%Y"))
    Output:
    
    21-06-2020
    22-06-2020
    23-06-2020
    24-06-2020
    25-06-2020
    26-06-2020
    27-06-2020
    28-06-2020
    29-06-2020
    30-06-2020
    01-07-2020
    02-07-2020
    03-07-2020
    04-07-2020
    32毫秒转换为数据
    import datetime
    
    time_in_millis = 1596542285000
    dt = datetime.datetime.fromtimestamp(time_in_millis / 1000.0, tz=datetime.timezone.utc)
    print(dt)
    Output:
    
    2020-08-04 11:58:05+00:00
    33查找给定日期之后的第一个星期日的日期
    import datetime
     
     
    def next_weekday(d, weekday):
        days_ahead = weekday - d.weekday()
        if days_ahead <= 0:
            days_ahead += 7
        return d + datetime.timedelta(days_ahead)
     
     
    d = datetime.date(2021, 5, 16)
    next_sunday = next_weekday(d, 6)
    print(next_sunday)
    Output:
    
    2021-05-23
    34将(Unix)时间戳秒转换为日期和时间字符串
    from datetime import datetime
    
    dateStr = datetime.fromtimestamp(1415419007).strftime("%A, %B %d, %Y %I:%M:%S")
    print(type(dateStr))
    print(dateStr)
    Output:
    
    Saturday, November 08, 2014 09:26:47
    35以月为单位的两个日期之间的差异
    from datetime import datetime
    from dateutil import relativedelta
     
    date1 = datetime.strptime('2014-01-12 12:00:00', '%Y-%m-%d %H:%M:%S')
    date2 = datetime.strptime('2021-07-15 12:00:00', '%Y-%m-%d %H:%M:%S')
     
    r = relativedelta.relativedelta(date2, date1)
    print(r.months + (12 * r.years))
    Output:
    
    90
    36将本地时间字符串转换为 UTC
    from datetime import *
    from dateutil import *
    from dateutil.tz import *
     
     
    utc_zone = tz.gettz('UTC')
    local_zone = tz.gettz('America/Chicago')
     
    utc_zone = tz.tzutc()
    local_zone = tz.tzlocal()
     
     
    local_time = datetime.strptime("2020-10-25 15:12:00", '%Y-%m-%d %H:%M:%S')
    print(local_time)
    local_time = local_time.replace(tzinfo=local_zone)
    print(local_time)
     
    utc_time = local_time.astimezone(utc_zone)
    print(utc_time)
     
    utc_string = utc_time.strftime('%Y-%m-%d %H:%M:%S')
    print(utc_string)
    Output:
    
    2020-10-25 15:12:00
    2020-10-25 15:12:00+05:30
    2020-10-25 09:42:00+00:00
    2020-10-25 09:42:00
    37获取当月的最后一个星期四
    import calendar
    from datetime import datetime
     
    month = calendar.monthcalendar(datetime.today().year, datetime.today().month)
     
    thrusday = max(month[-1][calendar.THURSDAY], month[-2][calendar.THURSDAY])
    print(thrusday)
    Output:
    
    27
    38从特定日期查找一年中的第几周
    import pendulum
     
    dt = pendulum.parse('2015-05-18')
    print(dt.week_of_year)
     
    dt = pendulum.parse('2019-12-01')
    print(dt.week_of_year)
     
    dt = pendulum.parse('2018-01-21')
    print(dt.week_of_year)
    Output:
    
    21
    48
    3
    39从给定日期获取星期几
    import datetime
    import calendar
     
    dt = datetime.datetime(2021, 4, 25, 23, 24, 55, 173504)
    print(calendar.day_name[dt.weekday()])
    Output:
    
    Sunday
    40用 AM PM 打印当前时间
    from datetime import datetime
     
    print(datetime.today().strftime("%I:%M %p"))
    Output:
    
    10:11 PM
    41获得一个月的最后一天
    import calendar
     
    print(calendar.monthrange(2002, 1)[1])
    print(calendar.monthrange(2008, 6)[1])
    print(calendar.monthrange(2012, 2)[1])
    print(calendar.monthrange(2015, 2)[1])
    Output:
    
    31
    30
    29
    28
    42从工作日值中获取工作日名称
    import calendar
     
    print(calendar.day_name[0])
    print(calendar.day_name[1])
    print(calendar.day_name[2])
    print(calendar.day_name[3])
    print(calendar.day_name[4])
    print(calendar.day_name[5])
    print(calendar.day_name[6])
    Output:
    
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    43将 N 小时数添加到当前日期时间
    from datetime import datetime, timedelta
    
    d = datetime.today() + timedelta(hours=18)
    print(d)
    Output:
    
    2021-05-16 07:36:08.189948
    44从当前日期获取年、月、日、小时、分钟
    import datetime
     
    now = datetime.datetime.now()
    print(now.year, now.month, now.day, now.hour, now.minute, now.second)
    Output:
    
    2021 5 15 14 27 33
    45获取特定月份和年份的最后一个星期日
    import calendar
    
    month = calendar.monthcalendar(2021, 2)
    
    last_sunday = max(month[-1][calendar.SUNDAY], month[-2][calendar.SUNDAY])
    print(last_sunday)
    Output:
    
    28
    46查找特定日期的年份中的哪一天
    import pendulum
     
    dt = pendulum.parse('2015-05-18')
    print(dt.day_of_year)
     
    dt = pendulum.parse('2019-12-01')
    print(dt.day_of_year)
     
    dt = pendulum.parse('2018-01-21')
    print(dt.day_of_year)
    Output:
    
    138
    335
    21
    47查找当前日期是工作日还是周末
    import datetime
     
    weekno = datetime.datetime.today().weekday()
    if weekno < 5:
        print("Weekday")
    else:  # 5 Sat, 6 Sun
        print("Weekend")
    Output:
    
    Weekday
    48组合 datetime.date 和 datetime.time 对象
    import datetime
     
    d = datetime.datetime.combine(datetime.date(2020, 11, 14),
                                  datetime.time(10, 23, 15))
     
    print(d)
    Output:
    
    2020-11-14 10:23:15
    49获得每月的第 5 个星期一
    import calendar
     
    c = calendar.Calendar(firstweekday=calendar.SUNDAY)
    year = 2016
    month = 2
    monthcal = c.monthdatescalendar(year, month)
     
    try:
        fifth_monday = [day for week in monthcal for day in week if
                        day.weekday() == calendar.MONDAY and day.month == month][4]
        print(fifth_monday)
    except IndexError:
        print('No date found')
    Output:
    
    2016-02-29
    50将日期时间对象转换为日期对象
    from datetime import datetime
    
    datetime_obj = datetime(2020, 12, 15, 10, 15, 45, 321474)
    print(datetime_obj)
    
    date_obj = datetime_obj.date()
    print(date_obj)
    Output:
    
    2020-12-15 10:15:45.321474
    2020-12-15
    51获取没有微秒的当前日期时间
    from datetime import datetime
    
    print(datetime.now().isoformat(' ', 'seconds'))
    Output:
    
    2021-05-15 12:55:45
    52将 N 秒数添加到特定日期时间
    import datetime
    
    a = datetime.datetime(2020, 12, 31, 23, 59, 45)
    b = a + datetime.timedelta(seconds=30)
    
    print(a)
    print(b)
    Output:
    
    2020-12-31 23:59:45
    2021-01-01 00:00:15
    53从当前日期获取两位数的月份和日期
    import datetime
     
    dt = datetime.datetime.now()
     
    print(dt.strftime('%m'))
    print('{:02d}'.format(dt.month))
    print(f'{dt.month:02d}')
    print('%02d' % dt.month)
     
    print(dt.strftime('%d'))
    print('{:02d}'.format(dt.day))
    print(f'{dt.day:02d}')
    print('%02d' % dt.day)
    Output:
    
    05
    05
    05
    05
    15
    15
    15
    15
    54从特定日期获取月份数据的开始和结束日期
    import pendulum
     
    dt = pendulum.datetime(2012, 9, 5)
     
    start = dt.start_of('month')
    print(start.to_datetime_string())
     
    end = dt.end_of('month')
    print(end.to_datetime_string())
    Output:
    
    2012-09-01 00:00:00
    2012-09-30 23:59:59
    55以周为单位的两个日期之间的差异
    from datetime import date
     
    date1 = date(2020, 12, 23)
    date2 = date(2021, 5, 11)
     
    days = abs(date1 - date2).days
    print(days // 7)
    Output:
    
    19
    56将字符串格式的日期转换为 Unix 时间戳
    import datetime
     
    stime = '15/05/2021'
    print(datetime.datetime.strptime(stime, "%d/%m/%Y").timestamp())
    Output:
    
    1621017000.0
    57获取最后一个周日和周六的日期
    from datetime import datetime, timedelta
     
     
    def prior_week_end():
        return datetime.now() - timedelta(days=((datetime.now().isoweekday() + 1) % 7))
     
     
    def prior_week_start():
        return prior_week_end() - timedelta(days=6)
     
     
    print('Sunday', format(prior_week_start()))
    print('Saturday', format(prior_week_end()))
    Output:
    
    Sunday 2021-05-09 13:13:30.057765
    Saturday 2021-05-15 13:13:30.058912
    58检查对象是否属于 datetime.date 类型
    import datetime
     
    x = '2012-9-1'
    y = datetime.date(2012, 9, 1)
     
    print(isinstance(x, datetime.date))
    print(isinstance(y, datetime.date))
    Output:
    
    False
    True
    59获取特定日期的周数
    import datetime
     
    print(datetime.date(2020, 5, 15).isocalendar()[1])
    Output:
    
    20
    60获取 UTC 时间
    from datetime import datetime
    
    dt = datetime.utcnow()
    print(dt)
    Output:
    
    2021-05-15 17:01:31.008808
    61获取本周的开始和结束日期
    import pendulum
    
    today = pendulum.now()
    
    start = today.start_of('week')
    print(start.to_datetime_string())
    
    end = today.end_of('week')
    print(end.to_datetime_string())
    Output:
    
    2021-05-10 00:00:00
    2021-05-16 23:59:59
    62两个日期之间的差异(以分钟为单位)
    from datetime import datetime
     
    fmt = '%Y-%m-%d %H:%M:%S'
    d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
    d2 = datetime.strptime('2010-01-03 17:31:22', fmt)
     
    days_diff = d2 - d1
    print(days_diff.days * 24 * 60)
    Output:
    
    2880
    63将日期时间对象转换为日期字符串
    import datetime
     
    t = datetime.datetime(2020, 12, 23)
    x = t.strftime('%m/%d/%Y')
    print(x)
    Output:
    
    12/23/2020
    64获得上周五
    from datetime import date
    from datetime import timedelta
    
    today = date.today()
    
    offset = (today.weekday() - 4) % 7
    friday = today - timedelta(days=offset)
    print(friday)
    Output:
    
    2021-05-14
    65将 3 周添加到任何特定日期
    import pendulum
     
    dt = pendulum.datetime(2012, 2, 15)
    dt = dt.add(weeks=3)
    print(dt.to_date_string())
    Output:
    
    2012-03-07
    66在其他两个日期之间生成一个随机日期
    import random
    import time
     
     
    def str_time_prop(start, end, time_format, prop):
        stime = time.mktime(time.strptime(start, time_format))
        etime = time.mktime(time.strptime(end, time_format))
        ptime = stime + prop * (etime - stime)
        return time.strftime(time_format, time.localtime(ptime))
     
     
    def random_date(start, end, prop):
        return str_time_prop(start, end, '%m/%d/%Y %I:%M %p', prop)
     
     
    print(random_date("1/1/2020 1:10 PM", "1/1/2021 1:10 AM", random.random()))
    Output:
    
    02/25/2020 08:26 AM
    67查找从今天开始的第一个星期一的日期
    from dateutil.rrule import rrule, WEEKLY, MO
    from datetime import date
     
    next_monday = rrule(freq=WEEKLY, dtstart=date.today(), byweekday=MO, count=1)[0]
    print(next_monday)
    Output:
    
    2021-05-17 00:00:00
    68两个日期之间的差异(以天为单位)
    from datetime import date
     
    d1 = date(2019, 8, 18)
    d2 = date(2021, 12, 10)
     
    days_diff = d2 - d1
    print(days_diff.days)
    Output:
    
    845
    69向当前日期添加六个月
    from datetime import datetime
    from dateutil.relativedelta import *
    
    date = datetime.now()
    print(date)
    
    date = date + relativedelta(months=+6)
    print(date)
    Output:
    
    2021-05-15 13:48:52.135612
    2021-11-15 13:48:52.135612
    70将数据时间对象转换为 Unix(时间戳)
    import datetime
    import time
    
    # Saturday, October 10, 2015 10:10:00 AM
    date_obj = datetime.datetime(2015, 10, 10, 10, 10)
    print("Unix Timestamp: ", (time.mktime(date_obj.timetuple())))
    Output:
    
    Unix Timestamp: 1444452000.0
    71将年、月、日、时、分、秒的 N 个数字添加到当前日期时间
    import datetime
    from dateutil.relativedelta import relativedelta
    
    add_days = datetime.datetime.today() + relativedelta(days=+6)
    add_months = datetime.datetime.today() + relativedelta(months=+6)
    add_years = datetime.datetime.today() + relativedelta(years=+6)
    
    add_hours = datetime.datetime.today() + relativedelta(hours=+6)
    add_mins = datetime.datetime.today() + relativedelta(minutes=+6)
    add_seconds = datetime.datetime.today() + relativedelta(seconds=+6)
    
    print("Current Date Time:", datetime.datetime.today())
    print("Add 6 days:", add_days)
    print("Add 6 months:", add_months)
    print("Add 6 years:", add_years)
    print("Add 6 hours:", add_hours)
    print("Add 6 mins:", add_mins)
    print("Add 6 seconds:", add_seconds)
    Output:
    
    Current Date Time: 2017-04-04 18:32:10.192671
    Add 6 days: 2017-04-10 18:32:10.191671
    Add 6 months: 2017-10-04 18:32:10.192671
    Add 6 years: 2023-04-04 18:32:10.192671
    Add 6 hours: 2017-04-05 00:32:10.192671
    Add 6 mins: 2017-04-04 18:38:10.192671
    Add 6 seconds: 2017-04-04 18:32:16.192671
    72获取指定开始日期和结束日期之间的日期范围
    import datetime
     
    start = datetime.datetime.strptime("2016-06-15", "%Y-%m-%d")
    end = datetime.datetime.strptime("2016-06-30", "%Y-%m-%d")
    date_array = \
        (start + datetime.timedelta(days=x) for x in range(0, (end-start).days))
     
    for date_object in date_array:
        print(date_object.strftime("%Y-%m-%d"))
    Output:
    
    2016-06-15
    2016-06-16
    2016-06-17
    2016-06-18
    2016-06-19
    2016-06-20
    2016-06-21
    2016-06-22
    2016-06-23
    2016-06-24
    2016-06-25
    2016-06-26
    2016-06-27
    2016-06-28
    2016-06-29
    73减去 N 个年、月、日、时、分、秒到当前日期时间
    import datetime
    from dateutil.relativedelta import relativedelta
    
    sub_days = datetime.datetime.today() + relativedelta(days=-6)
    sub_months = datetime.datetime.today() + relativedelta(months=-6)
    sub_years = datetime.datetime.today() + relativedelta(years=-6)
    
    sub_hours = datetime.datetime.today() + relativedelta(hours=-6)
    sub_mins = datetime.datetime.today() + relativedelta(minutes=-6)
    sub_seconds = datetime.datetime.today() + relativedelta(seconds=-6)
    
    print("Current Date Time:", datetime.datetime.today())
    print("Subtract 6 days:", add_days)
    print("Subtract 6 months:", add_months)
    print("Subtract 6 years:", add_years)
    print("Subtract 6 hours:", add_hours)
    print("Subtract 6 mins:", add_mins)
    print("Subtract 6 seconds:", add_seconds)
    Output:
    
    Current Date Time: 2017-04-04 18:36:29.213046
    Subtract 6 days: 2017-03-29 18:36:29.213046
    Subtract 6 months: 2016-10-04 18:36:29.213046
    Subtract 6 years: 2011-04-04 18:36:29.213046
    Subtract 6 hours: 2017-04-04 12:36:29.213046
    Subtract 6 mins: 2017-04-04 18:30:29.213046
    Subtract 6 seconds: 2017-04-04 18:36:23.213046
    74获取指定年份和月份的月份第一天的工作日和月份的天数
    import calendar
     
    print("Year:2002 - Month:2")
    month_range = calendar.monthrange(2002, 2)
    print("Weekday of first day of the month:", month_range[0])
    print("Number of days in month:", month_range[1])
    print()
    print("Year:2010 - Month:5")
    month_range = calendar.monthrange(2010, 5)
    print("Weekday of first day of the month:", month_range[0])
    print("Number of days in month:", month_range[1])
    Output:
    
    Year:2002 - Month:2
    Weekday of first day of the month: 4
    Number of days in month: 28
    
    Year:2010 - Month:5
    Weekday of first day of the month: 5
    Number of days in month: 31
    75打印特定年份的所有星期一
    from datetime import date, timedelta
    
    year = 2018
    date_object = date(year, 1, 1)
    date_object += timedelta(days=1-date_object.isoweekday())
    
    while date_object.year == year:
        print(date_object)
        date_object += timedelta(days=7)
    Output:
    
    2018-01-01
    2018-01-08
    2018-01-15
    2018-01-22
    2018-01-29
    2018-02-05
    2018-02-12
    ...
    2018-11-12
    2018-11-19
    2018-11-26
    2018-12-03
    2018-12-10
    2018-12-17
    2018-12-24
    2018-12-31
    76打印特定年份的日历
    import calendar
    cal_display = calendar.TextCalendar(calendar.MONDAY)
    # Year: 2019
    # Column  1
    # Lines per week: 1 
    # Number of spaces between month columns: 0
    # No. of months per column: 2
    print(cal_display.formatyear(2019, 1, 1, 0, 2))
    Output:
    
    略
    77从月份编号中获取月份名称
    import calendar
    import datetime
    
    # Month name from number
    print("Month name from number 5:")
    month_num = 1
    month_abre = datetime.date(2015, month_num, 1).strftime('%b')
    month_name = datetime.date(2015, month_num, 1).strftime('%B')
    print("Short Name:", month_abre)
    print("Full  Name:", month_name)
    
    print("\nList of all months from calendar")
    # Print list of all months from calendar
    for month_val in range(1, 13):
        print(calendar.month_abbr[month_val], "-", calendar.month_name[month_val])
    Output:
    
    Month name from number 5:
    Short Name: Jan
    Full Name: January
    
    List of all months from calendar
    Jan - January
    Feb - February
    Mar - March
    Apr - April
    May - May
    Jun - June
    Jul - July
    Aug - August
    Sep - September
    Oct - October
    Nov - November
    Dec - December
    78从给定日期获取一周的开始和结束日期
    from datetime import datetime, timedelta
     
    date_str = '2018-01-14'
    date_obj = datetime.strptime(date_str, '%Y-%m-%d')
     
    start_of_week = date_obj - timedelta(days=date_obj.weekday())  # Monday
    end_of_week = start_of_week + timedelta(days=6)  # Sunday
    print(start_of_week)
    print(end_of_week)
    Output:
    
    2018-01-08 00:00:00
    2018-01-14 00:00:00
    79根据当前日期查找上一个和下一个星期一的日期
    import datetime
    
    today = datetime.date.today()
    last_monday = today - datetime.timedelta(days=today.weekday())
    coming_monday = today + datetime.timedelta(days=-today.weekday(), weeks=1)
    print("Today:", today)
    print("Last Monday:", last_monday)
    print("Coming Monday:", coming_monday)
    Output:
    
    Today: 2018-01-21
    Last Monday: 2018-01-15
    Coming Monday: 2018-01-22
    80获取当前季度的第一个日期和最后一个日期
    from datetime import datetime, timedelta
    
    current_date = datetime.now()
    current_quarter = round((current_date.month - 1) / 3 + 1)
    first_date = datetime(current_date.year, 3 * current_quarter - 2, 1)
    last_date = datetime(current_date.year, 3 * current_quarter + 1, 1)\
        + timedelta(days=-1)
    
    print("First Day of Quarter:", first_date)
    print("Last Day of Quarter:", last_date)
    Output:
    
    First Day of Quarter: 2018-01-01 00:00:00
    Last Day of Quarter: 2018-03-31 00:00:00
  • 相关阅读:
    【Offer】[5] 【替换空格】
    【Offer】[3-2] 【不修改数组找出重复的数字】
    【Offer】[3-1] 【找出数组中重复的数字】
    【Spring】 IOC Base
    【Java并发】CallBack和Future模式
    【Java并发】并发队列与线程池
    【Java并发】几个常用API
    linux基础_vi和vim快捷键
    python_字典
    python_列表方法
  • 原文地址:https://www.cnblogs.com/qjk95/p/15735794.html
Copyright © 2011-2022 走看看