3 votos

¿Cuál es la aplicación correcta a la que hay que llamar para poder utilizar la fecha?

En AppleScript si tienes una cadena con una fecha e intentas convertirla en una clase de date se producirá un error en el Finder y en los Eventos del Sistema. Ejemplo:

set testDate to "Friday, September 21, 2018 at 6:54:29 PM"
set testResult to date testDate
return testResult

rinde:

enter image description here

Al colocar el código anterior en un Evento de Sistema:

tell application "System Events"
    set testDate to "Friday, September 21, 2018 at 6:54:29 PM"
    set testResut to date testDate
    return testResut
end tell

devoluciones:

Eventos del sistema tiene un error: No se puede obtener la fecha "viernes, 21 de septiembre de 2018 a las 18:54:29".

Intentando colocar lo anterior en un relato del Finder:

tell application "Finder"
    set testDate to "Friday, September 21, 2018 at 6:54:29 PM"
    set testResut to date testDate
    return testResut
end tell

El buscador tiene un error: No se puede obtener la fecha "viernes 21 de septiembre de 2018 a las 18:54:29".

¿Qué debo utilizar para poder convertir una cadena de fechas en una fecha real si ya estoy utilizando Eventos del Sistema o Finder? La única alternativa que he encontrado es crear un manejador:

tell application "System Events"
    set testDate to "Friday, September 21, 2018 at 6:54:29 PM"
    return my stringDate(testDate)
end tell
on stringDate(theString)
    set attempt to date theString
    return attempt
end stringDate

¿Cómo puedo hacer un date en un bloque de eventos del sistema o del Finder?


Se ha discutido en los comentarios con el suministrado responder pero dadas las especificaciones del sistema de:

MacOS High Sierra versión 10.13.6

y la solución copiada:

tell application "System Events"
    set testDate to "Friday, 21 September, 2018 at 6:54:29 PM"
    set testResult to my (date testDate)
end tell

Abre un nuevo editor de script:

enter image description here

Solución de código pegado:

enter image description here

Solución de código compilado:

enter image description here

Solución del código de la carrera:

enter image description here

El problema persiste.

2voto

qarma Puntos 71

Es interesante, nunca había notado esta rareza de AppleScript. Extrañamente, si creas el date utilizando una cadena por valor, ni Eventos del sistema ni Buscador tiene un problema:

tell application "System Events"
    set testResult to date "Friday, 21 September 2018 at 6:54:29"
end tell

está absolutamente bien (el formato de mi cadena de fechas es diferente al tuyo, según la configuración de mi sistema).

El problema sólo se presenta cuando se hace referencia al valor de la cadena mediante una variable:

tell application "System Events"
    set testDate to "Friday, 21 September, 2018 at 6:54:29 PM"
    set testResult to date testDate
end tell

como ha señalado, es no permitido.

Solución:

Resulta que la solución es remitir el trabajo al objeto AppleScript de nivel superior utilizando my (o AppleScript's ):

tell application "System Events"
    set testDate to "Friday, 21 September, 2018 at 6:54:29 PM"
    set testResult to my (date testDate)
end tell

Nota para otros usuarios: Las cadenas de fecha de AppleScript se formatean de acuerdo con la configuración de fecha/hora de tu sistema, por lo que un copiado y pegado directo de cualquiera de los fragmentos anteriores -ya sea el mío o el de la OP- puede generar un error. Tienes que determinar el formato apropiado para la cadena de fecha en tu sistema, lo que es más fácil de hacer examinando el valor devuelto por el comando AppleScript current date y utilizarlo como plantilla.

0voto

Darth_Vader Puntos 138

Nota CJK's responder al principio no funcionó debido a la forma en que generó su fecha a través del bloque de tell:

tell application "System Events"
    set testDate to "Friday, 21 September, 2018 at 6:54:29 PM"
    set testResult to my (date testDate)
end tell

Después de algunas pruebas iniciales con un desglose de cómo mi sistema trata date la solución sugerida utilizando:

my (date testDate)

funciona pero simplemente copiando la cuenta y las pruebas no . Aquí están los resultados de mis pruebas con la sugerencia para cualquier otra persona que quiera replicar los resultados:

on dateHandler(dateString)
    tell application "System Events"
        set classTest to get class of dateString
        if not (classTest is equal to date) then
            display notification "Found class of " & classTest
            set testResult to my (date dateString)
            return testResult
        else
            return dateString
        end if
    end tell
end dateHandler

set forceText to (current date) as text
set test1 to my dateHandler(forceText)
return test1

set test2 to my dateHandler(current date)
return test2

set forceText to (current date) as string
set test3 to my dateHandler(forceText)
return test3

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X