AppleScript: как получить время без секунд? В качестве альтернативы, как удалить текст в середине строки?

Если вы используете следующий код:

set CurrentTime to (time string of (current date))

Текущее время будет установлено в следующем формате:

12:02:38 PM

Однако я хочу, чтобы CurrentTime было:

12:02 PM

Итак, я хочу удалить символы в позициях 6, 7 и 8 в строке.

Как это можно сделать в AppleScript? Спасибо.

Ответы (4)

Вы можете использовать что-то вроде этого:

set CurrentTime to (do shell script "date +\"%l:%M %p\" | awk '{$1=$1;print}'")

Дополнительную информацию о модификаторах dateи их модификаторах можно найти на сайте cyberciti .

%l - hour (1..12)
%M - minute (00..59)
%p - locale’s equivalent of either AM or PM; blank if not known
Спасибо за решение. Ваша команда немного изменяет формат часов. Вместо «15:16:47» я получаю «15:16». Возможно ли иметь однозначные часы без нуля впереди (т.е. в том же формате, что и строка времени (текущая дата) )?
@rubik'ssphere обновил ответ. Используйте %l (нижний регистр L) для часового формата.
Ноль исчез, за ​​исключением того, что теперь перед строкой добавляется дополнительный пробел. Например, «15:16». Можно ли обойтись без места?
@rubik'ssphere добавлен awkдля обрезки начального пробела.

Вот подпрограмма AppleScript , которую я нашел при поиске в Google, которая делает то, что вы просили.

on getTimeInHoursAndMinutes()
    -- Get the "hour"
    set timeStr to time string of (current date)
    set Pos to offset of ":" in timeStr
    set theHour to characters 1 thru (Pos - 1) of timeStr as string
    set timeStr to characters (Pos + 1) through end of timeStr as string

    -- Get the "minute"
    set Pos to offset of ":" in timeStr
    set theMin to characters 1 thru (Pos - 1) of timeStr as string
    set timeStr to characters (Pos + 1) through end of timeStr as string

    --Get "AM or PM"
    set Pos to offset of " " in timeStr
    set theSfx to characters (Pos + 1) through end of timeStr as string

    return (theHour & ":" & theMin & " " & theSfx) as string
end getTimeInHoursAndMinutes

set CurrentTime to getTimeInHoursAndMinutes()

Один вариант только для AppleScript:

# your line
set CurrentTime to (time string of (current date))
# place all the words of the time string into a list
set EveryWord to every word of CurrentTime
# do a very basic test on what we got and assemble the string using the parts plus separators
if length of EveryWord = 4 then
    # if we have 4 words, there must be a form of AM/PM
    set CurrentTime to item 1 of EveryWord & ":" & item 2 of EveryWord & " " & item 4 of EveryWord
else
    # 24-hour clock
    set CurrentTime to item 1 of EveryWord & ":" & item 2 of EveryWord
end if
Это интересный способ, однако else ветвь , вероятно, никогда не сработает, поскольку я считаю, что элемент времениcurrent date не представлен в 24-часовом формате , и всегда будет AMили PM. Хотя я предполагаю, что можно было бы изменить значения по умолчанию, откуда current dateполучить информацию.
current dateвернет дату и время в текущей установленной локализации. Я с болью узнал об этом, когда полагался на него, чтобы отвечать по-американски, и мой скрипт перестал работать на компьютере коллеги. Во время тестов я обнаружил, что при установке системных часов на 24-часовой формат вывод изменился. Наоборот, hours of (current date)всегда будут возвращаться часы, прошедшие с полуночи (= 24-часовой путь). Поэтому я рекомендую использовать части даты и времени при проверке текущей даты и времени. У вас также есть возможность вывести его так, как вам нравится.
Я использую американский английский с настройками по умолчанию и current dateвыводами, например «Понедельник, 14 ноября 2016 г., 9:44:45», независимо от того, установлен ли флажок [] Использовать 24-часовой формат или нет, и поэтому я сделал первый комментарий. В моей системе ветвь никогда не срабатывает. else
Прежде всего, если вы используете одинаковую настройку системы на каждом компьютере, на котором работаете, вы, возможно, не столкнетесь с этим. Кроме того, изменение отображения времени в дополнительном меню часов не меняет ничего, кроме этого. Вам нужно будет перейти в «Язык и регион», чтобы включить опцию «Формат времени [x] 24-часовое время». Фрагмент моего примера будет работать на каждом компьютере с желаемым выводом OP, а не только на тех, на которых отображаются «AM» и «PM» (или их региональные аналоги). Если с вами этого никогда не случится, смело используйте условие, работающее на вас, зачистив остальное.
Вы сказали: «Вам нужно перейти в «Язык и регион», чтобы включить параметр «Формат времени [x] 24-часовое время». У меня нет этого флажка в этом месте. В любом случае, как я уже сказал, ваш ответ дает интересный метод и еще один метод для использования рубиновой сферы.
В настоящее время используется OS X 10.11 El Capitan. Это определенно есть. Если вы используете другую ОС, название и расположение этого элемента могут отличаться. Это будет область, где вы можете настроить свой регион (и соответствующий формат отображения даты, времени и валюты). Опять же: если все, с чем вы когда-либо столкнетесь, - это системы США, вы можете просто использовать ту, которая действительна для 12-часового формата, и удалить вокруг нее операторы "if... then... else...end if". В этом случае он не будет работать в большинстве стран остального мира, где по умолчанию используется 24-часовой формат отображения времени.
Этот код отлично работает на моем компьютере.

Это упрощенно, но я использовал его для решения аналогичной проблемы, и это работает для вашего примера. Он просто снимает AM или PM, удаляет ненужные символы, а затем снова добавляет AM или PM. В последней строке используется диалоговое окно отображения для отображения результата.

set CurrentTime to (time string of (current date))
set revisedTime to CurrentTime as string
set myAMPM to text -1 thru -3 of revisedTime
set revisedTime to text 1 thru -7 of revisedTime
set revisedTime to revisedTime & myAMPM
display dialog revisedTime