2 / 2 / 4
Регистрация: 25.05.2013
Сообщений: 157

Отсортировать даты по 4 параметрам: год, месяц, день, время

30.03.2014, 05:44. Показов 9960. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть даты такого формата:
Fri, 28 Mar 2014 16:42:58 PDT
Fri, 28 Mar 2014 15:16:47 PDT
Sat, 29 Mar 2014 13:33:05 PDT
Sat, 29 Mar 2014 13:23:32 PDT
Sat, 29 Mar 2014 12:28:34 PDT
Sat, 29 Mar 2014 13:30:56 PDT
Sat, 29 Mar 2014 13:56:19 PDT

Нужно сортировать по 4 параметрам: год, месяц, день, время.

Подскажите какой-нибудь хороший способ решить задачу не используя миллионы ифов
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2014, 05:44
Ответы с готовыми решениями:

Календарь,формат даты день-месяц-год изменить на год-месяц-день
Доброго времени суток! нашел календарь ,но в нем формат даты "день-месяц-год", а в бд дата хранится "год-месяц-день" , как...

1. Дан текстовый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а п
1. Дан текстовый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а под год ‒ четыре...

Как вытащить из даты-день,месяц,год,день недели?
Cells(i, 5).Value = Day(CDate(Cells(i, 3).Value)) Cells(i, 6).Value = Month(CDate(Cells(i, 3).Value)) Cells(i, 7).Value =...

6
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
30.03.2014, 09:17
Ну сортируй в 4 подхода, сначала по году (у тебя получится несколько списков например), потом по месяцу, потом по дате и т д
Ну это первая глупость пришедшая в голову, можно ещё посидеть по думать.
0
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
30.03.2014, 12:52
Лучший ответ Сообщение было отмечено MechanicPaul как решение

Решение

можно все эти строки первести в питон формат даты и сделать сортировку списка дат. а алгоритмов сортировок списков много.
2
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
30.03.2014, 13:25
Python
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
a=([5, 29 ,4, 2015, '16:42:58','PDT'],
[5, 29 ,4, 2015, '17:42:58','PDT'],
[5, 27 ,4, 2014, '15:16:47','PDT'],
[6, 28 ,4, 2013, '14:16:47','PDT'])
  
 
 
 
 
def func(ab,key):
    return ab[key]
    
 
result=[]
for x in sorted(a,key=lambda x=a:func(x,0),reverse=True):
    result.append(x)
 
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,1),reverse=True):
    result.append(x)
    
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,2),reverse=True):
    result.append(x)
 
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,3),reverse=True):
    result.append(x)
 
a=result
result=[]
for x in sorted(a,key=lambda x=a:func(x,4),reverse=True):
    result.append(x)
    
print(result)
Правда входные параметры придется подкорректировать

Добавлено через 19 минут
Хотя не, не пашет )
0
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145
30.03.2014, 14:25
Лучший ответ Сообщение было отмечено MechanicPaul как решение

Решение

Может так:
Python
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
40
41
42
43
44
45
46
47
48
49
50
#! /usr/bin/env python3.2
# coding: utf-8
 
result=[]
 
a=( [4, 1, 4, 2004, '16:42:58', 'PDT'],
    [3, 2, 1, 2002, '17:42:58', 'PDT'],
    [2, 3, 3, 2003, '15:16:47', 'PDT'],
    [1, 4, 2, 2001, '14:16:47', 'PDT']) 
 
def func(ab,key):
    return ab[key]
c=0
for x in sorted(a,key=lambda x=a:func(x,0),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,1),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,2),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,3),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
c=0
for x in sorted(a,key=lambda x=a:func(x,4),reverse=True):
    c+=1
    result.append(x)
    if c == 4:
        result.append('***')
 
for x in result:
    print(x)
    print('*******************')
1
2 / 2 / 4
Регистрация: 25.05.2013
Сообщений: 157
30.03.2014, 17:47  [ТС]
проблема всех этих способов в том, что они по очереди сортируют по определённому параметру и в итоге результаты предыдущих сортировок не учитываются.

Вот результат работы при входных данных:

Python
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
a=( [4, 29, 2, 2004, '16:42:58', 'PDT'],
    [3, 28, 2, 2002, '17:42:58', 'PDT'],
    [2, 28, 2, 2003, '15:16:47', 'PDT'],
    [1, 29, 2, 2004, '14:16:47', 'PDT'])
 
 
 
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
***
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
***
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
***
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
***
*******************
[3, 28, 2, 2002, '17:42:58', 'PDT']
*******************
[4, 29, 2, 2004, '16:42:58', 'PDT']
*******************
[2, 28, 2, 2003, '15:16:47', 'PDT']
*******************
[1, 29, 2, 2004, '14:16:47', 'PDT']
*******************
***
*******************
А должно быть:
Python
1
2
3
4
5
6
a=( 
    [4, 29, 2, 2004, '16:42:58', 'PDT'],
    [1, 29, 2, 2004, '14:16:47', 'PDT'],
    [2, 28, 2, 2003, '15:16:47', 'PDT'],
    [3, 28, 2, 2002, '17:42:58', 'PDT']
)
Т.е выходит что это обычная сортировка по одному ключу, просто меняется сам ключ.

Добавлено через 1 час 42 минуты
Было лень смотреть формат даты Питона, поэтому сразу в sqlite3 формат переводил и их штатными средствами сортировал.
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
31.03.2014, 04:22
Python
1
2
3
4
5
6
7
8
9
10
11
12
from dateutil import parser
 
DATES = ["Fri, 28 Mar 2014 16:42:58 PDT",
         "Fri, 28 Mar 2014 15:16:47 PDT",
         "Sat, 29 Mar 2014 13:33:05 PDT",
         "Sat, 29 Mar 2014 13:23:32 PDT",
         "Sat, 29 Mar 2014 12:28:34 PDT",
         "Sat, 29 Mar 2014 13:30:56 PDT",
         "Sat, 29 Mar 2014 13:56:19 PDT"]
 
if "__main__" == __name__:
    print(sorted(DATES, key=lambda x: parser.parse(x)))
ЗЫ. python-dateutil можно взять здесь.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2014, 04:22
Помогаю со студенческими работами здесь

Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год. проверить
1)Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год. 2)проверить правильно...

Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год
Создать функцию. Дана дата в виде строки в американском формате месяц/день/год. Переделать ее в русский формат день.месяц.год. ...

Как от даты отнять год, месяц, день?
Добрый день. Подскажите, как получить Data_N: Есть таблица вида: |Data |Y|M|D|Data_N| |01.11.2015|4|3|5| | ...

Проверить корректность введенной даты (день, месяц, год)
Помогите срочно надо)) Проверить корректность введенной даты (день, месяц, год)

Как в maskedit с форматом даты увеличить ее на год, месяц или день?
Есть маскэдит. Маска ввода Дата. Надо чтобы при нажатии на кнопку эта дата увеличивалась. Надо чтобы пользователь сам что увеличить( ну это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например: Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru