Manipulación de la fecha de Apple para obtener múltiples formatos

3

Necesito obtener una fecha (mes, día, año) en varios formatos diferentes para cada parte. Entonces, para el 2 de enero de 1999 necesito:

  • el mes como January y Jan y 01 y 1
  • el día como 2 y 02
  • el año como 1999 y 99

Actualmente lo estoy haciendo con este hodgepodge que incluye una llamada de shell al comando date como se ve a continuación. Claramente no sé mucho sobre Applescript. Igualmente claro, tiene que haber una forma más eficiente (en lo que respecta al código ... ¡el rendimiento no es realmente 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
    
pregunta Chris 07.09.2014 - 22:10

1 respuesta

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

- > "Enero

Enero

01

1 "

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

- > "Sábado

sábado

02

2 "

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

- > "1999

99 "

  • La marca

    -v ajusta el elemento de fecha sin cambiar la fecha real.

  • -v2d es el segundo día

  • -v1m es el primer mes

  • -v99y es el año 1999

    Los formateadores de fecha son:

  • % n nueva línea

  • nombre de mes completo% B
  • % b abbr month name
  • % m número de mes con cero inicial
  • número de% -m mes sin cero inicial

Los otros formateadores siguen el mismo camino. Puede encontrar más información de formato simplemente buscando en Google.

Si quieres hacerlo todo en Applecript, entonces te sugiero que leas MacScripter / Dates & Tiempos en AppleScripts

---------- actualización

Creo que es más eficiente hacerlo con el script de shell. Pero si fuera a intentarlo y hacerlo solo en Applescript. Yo usaría controladores para rellenar o acortar el elemento. Y los justos les pasan el mes, año y día para ordenarlos.

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

Probablemente hay una mejor forma de hacerlo, pero este ejemplo puede darle una idea ...

    
respondido por el markhunte 08.09.2014 - 00:51

Lea otras preguntas en las etiquetas