Если вы используете следующий код:
set CurrentTime to (time string of (current date))
Текущее время будет установлено в следующем формате:
12:02:38 PM
Однако я хочу, чтобы CurrentTime было:
12:02 PM
Итак, я хочу удалить символы в позициях 6, 7 и 8 в строке.
Как это можно сделать в AppleScript? Спасибо.
Вы можете использовать что-то вроде этого:
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
Вот подпрограмма 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
Это упрощенно, но я использовал его для решения аналогичной проблемы, и это работает для вашего примера. Он просто снимает 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
сфера рубика
Матеуш Шлосек
сфера рубика
Матеуш Шлосек
awk
для обрезки начального пробела.