Manipolazione della data di Applescript per ottenere più formati

3

Ho bisogno di ottenere una data (mese, giorno, anno) in più formati diversi per ogni parte. Quindi, per il 2 gennaio 1999 ho bisogno di:

  • il mese come January e Jan e 01 e 1
  • il giorno come 2 e 02
  • l'anno come 1999 e 99

Attualmente lo sto facendo con questo miscuglio che include una chiamata di shell al comando date come mostrato di seguito. Chiaramente non ne so molto di Applescript. Altrettanto chiaramente, ci deve essere un modo più efficiente (in termini di codice ... le prestazioni non sono davvero un problema)!

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
    
posta Chris 07.09.2014 - 22:10
fonte

1 risposta

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

- > "Gennaio

Jan

01

1"

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

- > "Sabato

Sat

02

2"

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

- > "1999

99"

  • -v flag regola l'elemento della data senza cambiare la data reale.

  • -v2d è il 2 ° giorno

  • -v1m è il primo mese

  • -v99y è l'anno 1999

    I formattatori della data sono:

  • % n nuova riga

  • % B nome completo mese
  • % b nome mese abbr
  • % m numero del mese con zero iniziale
  • % - m numero del mese senza zero iniziale

Gli altri formattatori seguono allo stesso modo. Puoi trovare più informazioni sul formato semplicemente su Google.

Se vuoi fare tutto in mele, ti suggerisco di leggere attentamente MacScripter / Date e amp; Times in AppleScript

---------- aggiornamento

Penso che sia più efficiente farlo con lo script della shell. Ma se dovessi provare a farlo solo in Applescript. Vorrei usare i gestori su entrambi i pad o accorciare l'oggetto. E basta passare il mese, l'anno e il giorno a loro per ordinare.

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

Probabilmente esiste un modo migliore per farlo, ma questo esempio potrebbe darti un'idea ..

    
risposta data 08.09.2014 - 00:51
fonte

Leggi altre domande sui tag