Сравнение даты с многомерным массивом и вывод совпадений
Всем доброго здравия и с наступившим новым годом! Пусть в этом году количество багов будет нулевым а заработок будет минимум из 6 знаков!
Собственно говоря есть вопрос. Голова не соображает где я что делаю не так.
Есть задача: нужно с текущей датой сравнить массив обьектов и получить результаты совпадений.
На данный момент есть вот такой код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
import datetime name_current_mounth = str(datetime.date.today().strftime("%B")) #получили название текущего месяца number_current_mounth = str(datetime.date.today().strftime("%m")) #получили число текущего месяца current_date = int(datetime.date.today().strftime("%d")) #получили текущий день birth_list = { 'January' : { '1' : 'Ленка', '2' : 'Вася', '4' : 'Коля', }, } birth_mounth = ['January','February','March','April','May','June','July','August','September','October','November','December'] bith_day = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31'] i = 0 d = 0 while i != number_current_mounth: if birth_mounth[i] == name_current_mounth: mounth = birth_mounth[i] print('Mounth',birth_mounth[i]) while d != current_date: print('bith_day[d]',type(bith_day[d]),bith_day[d]) print('current_date',type(current_date),current_date) if bith_day[d] != str(current_date): how_birth = mounth[d] print(how_birth) else: d = d + 1 print('Ошибка',d) break else: print('Ошибка входных данных') i = i + 1
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Работа с многомерным массивом и вывод данных
Добрый день. Имеется массив вида Array ( => 16 => 20 => Array ( .
Сравнение элементов массива со столбцом базы данных и вывод совпадений в DataGridView
У меня есть массив из значений. Мне нужно каждый элемент этого массива сравнить со столбцом из базы.

Работа с многомерным массивом
Добрый день:handshake:, уважаемые коллеги! Прошу помочь с решение одной задачи, на которую моего.
Проблема с многомерным массивом
Всем привет. Подскажите советом. Имеем такой многомерный массив: array (size=2) 0 => .
Работа с многомерным массивом
Задание следующее: 1. Задать число строк и столбцов, минимальное и максимальное значения элементов.
2421 / 1463 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
Что должно быть? Пока из того, что скопировалось, в двух циклах while i и d индексы менялись не там где надо и циклы бесконечные были.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
import datetime name_current_mounth = str(datetime.date.today().strftime("%B")) #получили название текущего месяца number_current_mounth = str(datetime.date.today().strftime("%m")) #получили число текущего месяца current_date = int(datetime.date.today().strftime("%d")) #получили текущий день print(name_current_mounth, number_current_mounth, current_date) birth_list = { 'January' : { '1' : 'Ленка', '2' : 'Вася', '4' : 'Коля', }, } birth_mounth = ['January','February','March','April','May','June','July','August','September','October','November','December'] bith_day = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31'] i = 0 d = 0 while i != number_current_mounth: if birth_mounth[i] == name_current_mounth: mounth = birth_mounth[i] print('Mounth',birth_mounth[i]) while d != current_date: print('bith_day[d]',type(bith_day[d]),bith_day[d]) print('current_date',type(current_date),current_date) if bith_day[d] != str(current_date): how_birth = mounth[d] print(how_birth) else: print('Ошибка',d) d = d + 1 break else: print('Ошибка входных данных') i = i + 1
Добавлено через 9 минут
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import datetime name_current_mounth = str(datetime.date.today().strftime("%B")) # получили название текущего месяца number_current_mounth = str(datetime.date.today().strftime("%m")) # получили число текущего месяца current_date = int(datetime.date.today().strftime("%d")) # получили текущий день print(name_current_mounth, number_current_mounth, current_date) birth_list = { 'January': { '1': 'Ленка', '2': 'Вася', '4': 'Коля', }, } birth_mounth = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] bith_day = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'] match = [(day, name) for day, name in birth_list[name_current_mounth].items() if int(day) == current_date] print(*match)
сравнение даты на python
вобщем есть поле в бд, там datetime а я хочу сравнить его с реальной датой и если она (год,месяц, день) совпадает делать действия , как сравнить датетайм с датой?
megido
30.06.11 16:57:18 MSK
Вот уеб-девелопмент уже давно отделили от нормальной разработки.
Когда уже тупых пистонеров отсадят?
anonymous
( 30.06.11 17:03:26 MSK )
>>> from datetime import date, datetime >>> datetime.today().date() == date.today() True
Это то, что тебе нужно было?
rival ★★
( 30.06.11 17:08:03 MSK )
Ответ на: комментарий от rival 30.06.11 17:08:03 MSK
чет не очень работает
megido
( 30.06.11 17:12:50 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 17:12:50 MSK

Тип DateTime преобразовывается в datetime.date, т.е. сравнивать нужно с datetime.date.today()
AlexKiriukha ★★★★
( 30.06.11 17:38:20 MSK )
Ответ на: комментарий от megido 30.06.11 17:12:50 MSK

скобочки после date нужно, это метод а не аттрибут.
provaton ★★★★★
( 30.06.11 17:43:27 MSK )
Ответ на: комментарий от provaton 30.06.11 17:43:27 MSK
под фильтр ниче не попадает
megido
( 30.06.11 17:53:14 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 17:53:14 MSK

а ты уверен что в БД есть записи с такой датой?
provaton ★★★★★
( 30.06.11 17:58:56 MSK )
Ответ на: комментарий от provaton 30.06.11 17:58:56 MSK
да, сегодня добавлял 1. 2011-06-30 12:05:14 2. 2011-06-30 12:05:25
megido
( 30.06.11 18:00:23 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 18:00:23 MSK

У меня для тебя два слова: datetime vs date.
baverman ★★★
( 30.06.11 18:07:13 MSK )
Ответ на: комментарий от baverman 30.06.11 18:07:13 MSK
megido
( 30.06.11 18:10:02 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 18:10:02 MSK

provaton ★★★★★
( 30.06.11 18:14:24 MSK )
Ответ на: комментарий от megido 30.06.11 18:10:02 MSK

Смотрите в самых хреновых кинотеатрах: «Школоло пытается сравнить datetime с date».
baverman ★★★
( 30.06.11 18:15:31 MSK )
Ответ на: комментарий от baverman 30.06.11 18:15:31 MSK
ты идиот, я спросил как и можна ли вобще , бо есть функция TO_DAYS() в mysql
megido
( 30.06.11 18:50:12 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 18:50:12 MSK

Умник, такой умник, ага.
baverman ★★★
( 30.06.11 18:56:05 MSK )
Ответ на: комментарий от megido 30.06.11 18:50:12 MSK
На пятом цикле потуг сравнить datetime vs date это заявление выглядит особенно пикантно. 😉
LamerOk ★★★★★
( 30.06.11 18:56:12 MSK )
Ответ на: комментарий от provaton 30.06.11 18:14:24 MSK
Join on field ‘date’ not permitted. Did you misspell ‘date’ for the lookup type? чет не так?
msgs=Message.objects.filter(date__date__gt=datetime.date(2011, 7, 30))
megido
( 30.06.11 18:56:41 MSK ) автор топика
Может проще в БД хранить unix-timestamp как INT UNSIGNED? А в Пистоне как-нибудь:
import time time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(epoch)) (Replace time.localtime with time.gmtime for GMT time.)
kovrik ★★★★★
( 30.06.11 19:01:54 MSK )
Ответ на: комментарий от megido 30.06.11 18:56:41 MSK
start_date = datetime.date(2011, 6, 30) end_date = datetime.date(2011, 6, 30) msgs=Message.objects.filter(date__gt=datetime.date(2011, 6, 30))
вот так работает
megido
( 30.06.11 19:02:17 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 19:02:17 MSK
эээ рано радуюсь, теперь фильтр так, для прикола, в выборку попал 2015 год
megido
( 30.06.11 19:05:44 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 18:56:41 MSK
start_date = datetime.date(2011, 6, 30) end_date = datetime.date(2012, 6, 30) msgs=Message.objects.filter(date__range=(start_date,end_date))
вот так точно работает, но как же настроить range считать включительно?
megido
( 30.06.11 19:14:27 MSK ) автор топика
Ответ на: комментарий от megido 30.06.11 17:53:14 MSK
> msgs=Message.objects.filter(date=datetime.datetime.today().date)
У тебя поле «date» (тот, что перед знаком равенства) имеет тип datetime, и тебе нужно отфильтровать один день, или, как ты выразился, сравнить с реальной датой (то есть типом date).
Представь себе, что вместо datetime у тебя действительные числа в БД, например, {1.4142, 2.7182, 3.0, 3.1415}. И ты хочешь выбрать все числа, у которых целая часть равна некоторому целому числу, к примеру, 3.
И тут есть два очевидных решения.
Первое. Ты можешь приводить каждое действительное число из БД к целому, отбрасывая дробную часть, и сравнивать с заданным целым числом ([1.4141] == 3, [2.7182] == 3, . ).
Но такое решение не подходит под твое API, так как ты не можешь ничего сделать с полем date (типа datetime ака «действительное») перед тем, как сравнивать с заданным числом, либо можешь, но не знаешь как (я тоже не знаю, for all I care, джанговский filter() составляет SQL запрос, то есть никаких значений у тебя еще нет на данный момент в питоне, а соответственно и преобразовывать из одного типа в другой пока еще нечего, а в таком случае тебе доступны только SQL функции, среди которых может оказаться и нужная: DATETIME => DATE).
Что же ты делаешь (в моей аналогии)? Ты берешь некоторое действительное число (datetime.today()), отбрасываешь его дробную часть (используя метод date()), после чего сравниваешь каждое действительное число из БД с тем целым числом, которое у тебя получилось (1.4141 == [3.5], 2.7182 == [3.5], . ). Естественно, это не то, что ты хочешь получить.
Сравнение дат в datetime
Вы переводите формат datetime.datetime и datetime.date в строки (именно это делает метод strftime ), и потом их сравниваете. Разумеется, строка 09.11.2020 больше строки 05.07.3000 .
Сравнивать нужно непосредственно данные в форматах datetime:
dt.datetime.now() < dt.datetime(3000, 7, 5) # True
UPDATE
Если вам изначально дана строка, то переведите ее в формат dateimte и сравнивайте:
import datetime as dt my_string = "07.02.3000" my_dt = dt.datetime.strptime(my_string, '%d.%m.%Y') print(my_dt > dt.datetime.now()) # True
Как сравнить дату из QDateTimeEdit с сегодняшней датой?
нужно сравнить дату введенную в QDateTimeEdit с текущей датой, я хочу сделать так, чтобы при вводе сегодняшней даты, пользователю выдавалась ошибка, но не могу сделать условие, потому что не знаю как сравнить QDateTimeEdit с текущей датой, поставил минимальную дату, но нужно хотя бы чтобы разница между сегодняшней и выбранной датой была как минимум 1 день, есть какой-нибудь способ, добавить +1 день к текущей дате, или можно как-нибудь сравнить сегодняшнюю дату с введенной?
Пытался создать две переменные, одна бы сохраняла текущую дату при входе в программу, вторая сохраняла бы введенное значение, но не могу в методе вызвать переменную
#cd - current date cd = self.Auc.ChooseDate.text() def buttons(self): self.Auc.MakeAucButton.clicked.connect(self.mab) def mab(self): #chd - choosed Date chd = self.Auc.ChooseDate.text() if cd == chd: print("123123") print(chd) else: print("1111")
- Вопрос задан более года назад
- 48 просмотров
