簡體   English   中英

Python中日期時間對象的元組

[英]tuple of datetime objects in Python

我想編寫一個返回(start,end)元組的函數,其中start是星期一的00:00:00:000000,end是星期日的23:59:59:999999。 start和end是日期時間對象。 沒有提供有關日,月或年的其他信息。 我試過這個功能

def week_start_end(date):
 start= date.strptime("00:00:00.000000", "%H:%M:%S.%f")
 end = date.strptime("23:59:59.999999", "%H:%M:%S.%f")
return (start,end)

print week_start_end(datetime(2013, 8, 15, 12, 0, 0))

應該返回(datetime(2013,8,11,0,0,0,0),datetime(2013,8,17,23,59,59,999999))

但是該函數返回帶有日期的元組(datetime.datetime(1900,1,1,0,0),datetime.datetime(1900,1,1,23,59,59,999999))

我認為使用datetime.isocalendar是一個不錯的解決方案。 這為您的示例提供了正確的輸出:

import datetime

def iso_year_start(iso_year):
    "The gregorian calendar date of the first day of the given ISO year"
    fourth_jan = datetime.date(iso_year, 1, 4)
    delta = datetime.timedelta(fourth_jan.isoweekday()-1)
    return fourth_jan - delta 

def iso_to_gregorian(iso_year, iso_week, iso_day):
    "Gregorian calendar date for the given ISO year, week and day"
    year_start = iso_year_start(iso_year)
    return year_start + datetime.timedelta(days=iso_day-1, weeks=iso_week-1)


def week_start_end(date):
    year = date.isocalendar()[0]
    week = date.isocalendar()[1]
    d1 = iso_to_gregorian(year, week, 0)
    d2 = iso_to_gregorian(year, week, 6)
    d3 = datetime.datetime(d1.year, d1.month, d1.day, 0,0,0,0)
    d4 = datetime.datetime(d2.year, d2.month, d2.day, 23,59,59,999999)
    return (d3,d4)

舉個例子:

>>> d = datetime.datetime(2013, 8, 15, 12, 0, 0)
>>> print week_start_end(d)
(datetime.datetime(2013, 8, 11, 0, 0), datetime.datetime(2013, 8, 17, 23, 59, 59, 999999))

並且應該幫助您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM