1

Тема: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Добрый день.
Есть строка вида "03:47 Pm".
Мне ее надо конвертнуть в 24часовой формат, т.е. в "15:47".
Пробовал скармливать в разных формах это FormatTime'у, он либо не распознает, либо еще чего.

Я понимаю, что я могу сделать типа тупо так:


	time12 := "03:47 Pm"

	if (StrLen(time12) > 5)
	{
		timeArray := StrSplit(time12, ":", " APm")
		if (InStr(time12, " Pm"))
		{
			if (timeArray[1] = "12")
				time24 := "12:" . timeArray[2]
			else
				time24 := "" . timeArray[1] + 12 . ":" . timeArray[2]
		} else {
			if (timeArray[1] = "12")
				time24 := "00:" . timeArray[2]
			else
				time24 := StrReplace(time12, " Am")
		}
	} else {
		time24 := time12
	}
	MsgBox, %time12% %time24%

Но мне типа интересно, можно ли это дооптимизировать?

2

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Gh0sTG0 пишет:

Пробовал скармливать в разных формах это FormatTime'у

А в справку, конечно, не догадались заглянуть.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Gh0sTG0, 2022-10-01 00:49:18)

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

teadrinker
Сходил перечитал справку к форматтайму, которому обязательно надо скармливать фулл строку с часами в 24часовом формате, да.
Тупанул, да.
Или я все еще продолжаю тупить и не вижу про него что то очевидное?

4

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Не знаю, правильно ли я понял задачу, у меня так вышло:

time12 := "03:47 Pm"
if !RegExMatch(time12, "(\d+):(\d+)\s*(P|A)m", m)
   throw "Unknown format"
MsgBox, % time24 := Format("{:02}:{:02}", m1 + (m3 = "P" ? 12 : 0), m2)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Gh0sTG0 пишет:

Или я все еще продолжаю тупить и не вижу про него что то очевидное?

Вряд ли, там на вход можно подать только строку в формате YYYYMMDDHH24MISS.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: Gh0sTG0, 2022-10-01 00:59:42)

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

teadrinker
В целом вроде работает. Правда на 3 проходе вылезла регистрочувствительность к AM, pm и.т.п., но это можно просто сначала загнать в stringlower и поменять большие ap на маленькие.
Эх... Надо учить RegEx и все с ним связанное, но все никак руки не дойдут.
PS чет реально туплю, спать пора идти, а не кодить xD. Не на тот пост + кинул...

7

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Gh0sTG0 пишет:

Правда на 3 проходе вылезла регистрочувствительность к AM, pm и.т.п.

В RegEx можно добавить опцию, чтобы было нечувствительно к регистру:

RegExMatch(time12, "i)(\d+):(\d+)\s*(P|A)m", m)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: Gh0sTG0, 2022-10-01 01:20:34)

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

teadrinker пишет:

опцию, чтобы было нечувствительно к регистру

Вя .
Попробуйте мб сами сделать если можете для time12 := "12:47 Am".
Он не обрабатывает эти уродские случаи, когда у наглов 12 am это 0, а 12 pm это 12.

9

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Gh0sTG0 пишет:

А Format'у, как я понял, все равно, он и так нерегистрочувствительный?

Если имеете в виду эту часть:

m3 = "P" ? 12 : 0

то Format тут не причём, тут имеет значение знак сравнения. Можно использовать = это будет регистронезависимый вариант, а если использовать == это будет чувствительным к регистру.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Gh0sTG0 пишет:

Попробуйте мб сами сделать если можете для time12 := "12:47 Am"

По идее 12:47 Am быть не может, это неверный формат.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 (изменено: Gh0sTG0, 2022-10-01 01:48:02)

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

teadrinker
Ну почему же быть не может? Это Англия, это Хардкор...
http://sonraid.ru/onlajn-converting-a-12-hour-time-to-24-hour-time/
Вот тут если чего можно потыкаться в перевод...
И теперь вы понимаете, почему мне так ломает мозги и хочется сделать фигню которая мне будет подменять 12часовое время на 24часовое...
Да, у них сутки начинаются в 12AM(0ч)... Дальше идет 1AM(1ч), 2AM(2ч) и.т.д. вплоть до 11AM(11ч). Дальше начинается еще больше магии - 12PM (12ч), дальше идет 1PM (13ч), 2PM (14ч) и так вплоть до 11PM(23ч), а дальше опять 12AM(0ч).
PS и это же работает и для 12:47 Pm которые он преобразует в 24:47 вместо просто 12:47...
PPS сейчас упорно пытаюсь найти где же там в том месте вылезает 12 AM, пока что не нашел. Вроде пишет 0 AM, согласен.
Так что остается только проблема с тем, что 12PM это не 24, а 12, это точно есть, я проверил.

12

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

teadrinker пишет:

Если имеете в виду эту часть:

Ага, ее. Понял, спасибо.

13

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Наверно так:

time12 := "12:47 Am"
if !RegExMatch(time12, "i)(\d+):(\d+)\s*(P|A)m", m)
   throw "Unknown format"
MsgBox, % time24 := Format("{:02}:{:02}", m1 + (m1 = "12" ? (m3 = "A" ? -12 : 0) : (m3 = "A" ? 0 : 12)), m2)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

teadrinker пишет:

Наверно так:

Фууух, вроде работает, прогнал через все 24 часа от 12 до 11 AM и от 12 до 11 PM, проблем я тут больше не вижу.
Спасибо большое.

15

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

Ещё так:

time12 := "12:47 am"
if !RegExMatch(time12, "i)(\d+):(\d+)\s*(P|A)m", m)
   throw "Unknown format"
MsgBox, % time24 := Format("{:02}:{:02}", mod(m1 + ((m1 = 12) ^ (m3 = "A") ? 0 : 12), 24), m2)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Преобразовать строку вида "03:47 Pm" в 24 часовой формат не тупо?

teadrinker пишет:

Ещё так:

Второй тоже работает, спасибо.