Маніпуляція з датою яблука для отримання декількох форматів


4

Мені потрібно отримати дату (місяць, день, рік) у різних різних форматах для кожної частини. Отже, для 2 січня 1999 року мені потрібно:

  • місяць як Januaryі Janі 01і1
  • день як 2і02
  • рік як 1999і99

В даний час я це роблю з цим халявом, включаючи виклик оболонки до dateкоманди, як показано нижче. Ясно, що я мало що знаю про Applescript. Не менш чітко, має бути більш ефективний (кодовий ... продуктивність насправді не проблема)!

set {year:y, month:m, day:d} to (current date)
# aka 1999 - January - 2

set shortmonth to text 1 thru 3 of (month of (current date) as text)
# aka Jan

set nummonth to do shell script "date '+%m'"
# aka 01

set dd to text -2 thru -1 of ("00" & (day of (current date)))
# aka 02

set yy to text 3 thru 4 of (y as text)
# aka 99

Відповіді:


5
 set theMonth to do shell script " date -v2d -v1m -v99y +%B%n%b%n%m%n%-m"

-> "Січень

Січ

01

1 "

set theDay to do shell script " date -v2d -v1m -v99y +%A%n%a%n%d%n%-d"

-> "Субота

Сб

02

2 "

set theYear to do shell script " date -v2d -v1m -v99y +%Y%n%y"

-> «1999 рік

99 "

  • -v прапор коригує елемент дати без зміни реальної дати.

  • -v2d - 2-й день

  • -v1m - перший місяць

  • -v99y - 1999 рік

    Форматори дати:

  • % n новий рядок

  • % B назва місяця
  • % b абр. назва місяця
  • % m число місяця з першим нулем
  • % -м число місяця без нуля

Інші форматори слідують таким же чином. Ви можете знайти більше інформації про формат, просто погуглившись.

Якщо ви хочете зробити це все в яблучному скрипті, то я пропоную вам прочитати MacScripter / дати та часи в AppleScripts

---------- оновлення

Я думаю, що це більш ефективно робити це за допомогою сценарію оболонки. Але якщо я збирався спробувати це зробити в Applescript поодинці. Я б використовував обробники, щоб або прокладати або скоротити предмет. І просто проходять місяць, рік і день, щоб їх сортувати.

set {year:y, month:m, day:d} to current date
--set m to m + 1

set theYearLong to y as string
set theYearShort to shorten(y)


set theMonthNumberZero to pad((m as integer) as string)
set theMonthNumber to ((m as integer) as string)
set theMonthLong to m as string
set theMonthShort to shorten(m)


set theDayNumberZero to pad((d as integer) as string)
set theDayNumber to ((d as integer) as string)



on pad(thisNumber)
    if length of thisNumber = 1 then
        return "0" & thisNumber
    else
        return thisNumber
    end if
end pad


on shorten(thisItem)

    if class of thisItem is integer then
        return characters 3 thru -1 of (thisItem as text) as string
    else
        return characters 1 thru 3 of (thisItem as text) as string
    end if
end shorten

Можливо, є кращий спосіб зробити це, але цей приклад може дати вам уявлення ..


Можливо, я мав би бути зрозумілішим: я хотів би уникнути дзвінка до оболонки. Я переглянув цю статтю і фактично прочитав цю статтю, але мені залишається незрозумілим, як робити те, що мені потрібно зробити більш ЕФЕКТИВНО в Applescript (або, у випадку, якщо місяць є числом із нульовим значенням, де це необхідно, як це зробити взагалі) .
Кріс

@Chris Я трохи оновив свою відповідь ..
markhunte

Дуже дякую! Мені доведеться думати про те, що стосується оболонки ... Я інстинктивно уникаю таких речей, але, мабуть, немає вагомих причин, особливо, коли Applescripting.
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.