我想从日期时间对象列表中获得每个相似星期的工作日。
示例:对于列表
[2020-08-17 07:00:00, 2020-08-28 05:00:00, 2020-08-17 09:00:00, 2020-08-18 09:00:00, 2020-08-24 02:00:00, 2020-08-27 02:00:00]
结果应为:
list_1 = ['Mon', 'Tue']
list_2 = ['Mon', 'Thu', 'Fri']
答案 0 :(得分:1)
from datetime import datetime, timedelta
from collections import defaultdict
dates = ["2020-08-17 07:00:00", "2020-08-28 05:00:00", "2020-08-17 09:00:00", "2020-08-18 09:00:00", "2020-08-24 02:00:00", "2020-08-27 02:00:00"]
weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
# create a dictionary for storing each week's list
# default value for each entry is an empty list
weeks = defaultdict(list)
for dateString in dates:
# create datetime object from list element
date = datetime.strptime(dateString, '%Y-%m-%d %H:%M:%S')
# get the weekday of the date
weekday = weekdays[date.weekday()]
# get the date of last Monday (for indexing weeks)
weekMonday = (date - timedelta(days=date.weekday())).strftime("%Y-%m-%d")
# add weekday to the corresponding week entry in the dict
weeks[weekMonday].append(weekday)
# sort and remove duplicates
weeks[weekMonday] = list(sorted(set(weeks[weekMonday]), key=lambda x: weekdays.index(x)))
# print results
for x in weeks:
print("Week of " + x + ":", weeks[x])
输出:
Week of 2020-08-17: ['Mon', 'Tue']
Week of 2020-08-24: ['Mon', 'Thu', 'Fri']
您可以通过提供该周星期一的日期来访问每个列表,例如:
print(weeks["2020-08-17"]) # ['Mon', 'Tue']
答案 1 :(得分:0)
这会将日期转换为星期几(0-6):
import datetime
dates = ['2020-08-17 07:00:00', '2020-08-17 09:00:00', '2020-08-18 09:00:00', '2020-08-24 02:00:00', '2020-08-27 02:00:00', '2020-08-28 05:00:00']
dates = [datetime.datetime(int(item[0:4]), int(item[5:7]), int(item[8:9])) for item in dates]
days = [date.weekday() for date in dates]
weeks = [date.isocalendar()[1] for date in dates]
counts = {}
for i in range(len(days)):
if weeks[i] in counts:
if not(days[i] in counts[weeks[i]]):
counts[weeks[i]].append(days[i])
else:
counts[weeks[i]] = [days[i]]
答案 2 :(得分:0)
使用字典来有效跟踪一周中的日子:
from dateutil import parser
# The given dates as strings
sabich = [ '2020-08-17 07:00:00' , '2020-08-28 05:00:00' , '2020-08-17 09:00:00' , '2020-08-18 09:00:00' , '2020-08-24 02:00:00' , '2020-08-27 02:00:00' ]
weeks_dates = dict()
# Loop on the given dates as strings
for ds in sabich:
# Parse date from string o datetime object
dt = parser.parse(ds)
# Find date's week in year
week_in_year = dt.isocalendar()[1]
# Find date's day in week name
date_day_name = dt.strftime("%A")
# If week doesn't exists as key (no days of that date existed)
if week_in_year not in weeks_dates.keys():
# Create list to add the date names to that list
weeks_dates[week_in_year] = []
# Append the date week day name
weeks_dates[week_in_year].append(date_day_name)
# Printing the days names for each week
for week_in_year in weeks_dates.keys():
print(f'Week number {week_in_year}, days that appeared {weeks_dates[week_in_year]}')
输出:
Week number 34, days that appeared ['Monday', 'Monday', 'Tuesday']
Week number 35, days that appeared ['Friday', 'Monday', 'Thursday']