Как превратить строку, представляющую время, в число в Python? Любая встроенная функция? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть список меток времени строки:

['08:29', '08:03', '00:00', '08:09', '08:13', '07:54', '07:30']

Я хочу преобразовать каждую метку времени в десятичную форму, округленную до ближайшего 0,5, и вернуть строку. Вывод должен быть:

['8,5', '8,0', '0,0', '8,0', '8,0', '8,0', '7,5']

У меня есть несколько идей о том, как это сделать, но они все запутались в моей голове, и я уверен, что есть функция, которую я не знаю, которая поможет, цифры должны округляется от 0 до 5 десятичных знаков, поэтому 7:46 будет 8,0, 7:35 будет 7,5 и так далее ...

Ответы [ 4 ]

0 голосов
/ 05 марта 2020

Не выглядит великолепно, потому что я создал это на своем телефоне, но он должен работать

times = ['07:46', '07:35', '08:29', '08:03', '00:00', '08:09', '08:13'] 
new_times = [] 

for time in times:
    hours, minutes = time.split(":")
    minutes = round((int(minutes) / 60) * 2) / 2
    time = int(hours) + minutes
    new_times.append(str(time)) 
0 голосов
/ 05 марта 2020

Эта функция должна работать.

def conv(s):
    h, m = s.split(':', maxsplit=2)
    h = int(h)
    m = round(int(m) / 60 * 2) / 2
    if m >= 1:
        h += m // 1
        m %= 1

    return h + m

print(conv('07:44'))
print(conv('07:45'))
print(conv('07:46'))

вывод:

7.5
8.0
8.0
0 голосов
/ 05 марта 2020

Нет встроенной функции. Если вы хотите создать команду, которая преобразует время в число с плавающей точкой, вы должны разделить часы и минуты с помощью string.split (":"). Тогда вы можете просто сделать часы + (минуты / 60)

Вот код:

time=['08:29', '08:03', '00:00', '08:09', '08:13', '07:54', '07:30']

def convert(clock_time):
    times = clock_time.split(":")
    hour=int(times[0])
    minutes=int(times[1])

    minutes=(minutes/60)

    if 0.25<minutes<0.75:
        minutes=0.5
    elif 0.75<minutes<1:
        minutes=1
    else:
        minutes=0
    newtime = hour+minutes

    return newtime
for i in range(len(time)):
    print(convert(time[i]))
0 голосов
/ 05 марта 2020

Для этого есть несколько шагов:

  1. Преобразование строкового времени в объект даты и времени
  2. Извлечение часов в десятичном виде
  3. Округление до ближайшего 0,5
  4. Преобразование числа в строку и замена десятичных точек запятыми
from datetime import datetime
string_times = ['08:29', '08:03', '00:00', '08:09', '08:13', '07:54', '07:30']
numeric_times = []
for s in string_times:
    string_time = datetime.strptime(s, '%H:%M').time()
    numeric_time = string_time.hour+string_time.minute/60
    numeric_time_rounded = round(numeric_time*2)/2
    numeric_times.append(round(numeric_time_rounded,1))
output = [str(x).replace('.',',') for x in numeric_times]
print(output)

Вывод:

['8,5', '8,0', '0,0', '8,0', '8,0', '8,0', '7,5']
...