Как преобразовать полученную Apple Mail дату, месяц, строку или число? - PullRequest
0 голосов
/ 28 апреля 2018

Я делаю простой шаг через сообщения в моем почтовом ящике. Я хочу записать дату в текстовый файл. Дата указывается как «Воскресенье, 2 апреля 2017 года в 12:12:12:». Все, что я хочу сделать, - это преобразовать это в «2/2/17». Я продолжаю получать «Апрель» в качестве месяца и не могу его принудить в формате "4" MM.

tell application "Mail"
  repeat with aMessage in messages of inbox
  set sSender to (get aMessage's sender)
  set recDate to (date received of aMessage)
  set sMonth to month of recDate
  set sDate to day of recDate & "/" & month of recDate & "/" & year of recDate
end tell

Я попытался использовать эхо-код оболочки или преобразование sMonth в строку или целое число. Независимо от того, что я продолжаю получать «Апрель» вместо числа и «расширенный текст» вместо строки.

Я не возражаю против использования команды оболочки, но я не очень хорошо разбираюсь в Linux и не хочу преобразовывать текущую дату (мне нужно использовать дату предыдущего электронного письма). Я знаю, что, должно быть, упускаю что-то простое.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Прежде всего, чтобы избежать путаницы в терминологии (rich text вместо text), переместите код, чтобы создать строку даты в обработчике.

Чтобы получить 4 из month, просто приведите его к integer, затем приведите все компоненты к text. Чтобы убрать 20 из года, используйте только последние два символа.

tell application "Mail"
    repeat with aMessage in messages of inbox
        set sSender to (get aMessage's sender)
        set sDate to my dateString(date received of aMessage)
    end repeat
end tell

on dateString(theDate)
    tell theDate to set {yr, mn, dy} to {year as text, its month as integer as text, day as text}
    return mn & "/" & dy & "/" & text -2 thru -1 of yr  -- 4/27/18
end dateString

Если вы хотите добавить начальные нули к компонентам дня и месяца, используйте другой обработчик для заполнения значений

on dateString(theDate)
    tell theDate to set {yr, mn, dy} to {year as text, its month as integer as text, day as text}
    return pad(mn) & "/" & pad(dy) & "/" & text -2 thru -1 of yr  -- 04/27/18
end dateString

on pad(v)
    return text -2 thru -1 of ("0" & v)
end pad
0 голосов
/ 28 апреля 2018

Это работает для меня, используя последнюю версию macOS High Sierra

property theShortDate : missing value

tell application "Mail"
    repeat with aMessage in messages of inbox
        set sSender to (get aMessage's sender)
        set recDate to (date received of aMessage) as string
        my shortDate(recDate)
        log "This E-Mail Was Sent From:  " & sSender & " " & "on" & " " & theShortDate
    end repeat
end tell

on shortDate(recDate)
    set AppleScript's text item delimiters to ","
    set theLongDate to recDate
    set currentMonth to (word 1 of text item 2 of theLongDate)
    set currentDay to (word 2 of text item 2 of theLongDate)
    set currentYear to (word 1 of text item 3 of theLongDate)
    set monthList to {January, February, March, April, May, June, July, August, September, October, November, December}
    repeat with x from 1 to 12
        if currentMonth = ((item x of monthList) as string) then
            set theRequestNumber to (text -2 thru -1 of ("0" & x))
            exit repeat
        end if
    end repeat
    set currentMonth to theRequestNumber
    set currentDay to (text -2 thru -1 of ("0" & currentDay))
    set theShortDate to (currentMonth & "/" & currentDay & "/" & currentYear) as string
end shortDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...