3 votos

Comportamiento de la fecha codificada en AppleScript

Estoy diseñando un AppleScript que contiene una fecha codificada a la que el script hace referencia varias veces a lo largo de la ejecución. Un ejemplo es el siguiente:

property someDate : date "Monday, 1 January 2018 at 01:00:00 PM"

Como se puede ver, el formato de la marca de tiempo es apropiado para mi región y país. Otro ejemplo sería: Saturday, April 15, 2006 4:29:04 PM o 12/25/04 - que es el formato para otras regiones como los Estados Unidos - mm/dd/yy .

Se plantean las siguientes cuestiones

  1. Si mi AppleScript se ejecutará en otras regiones/países (aquellos con diferentes formatos de marca de tiempo, por ejemplo mm/dd/yy en lugar de mi dd/mm/yy ), ¿cómo se comporta AppleScript con la declaración anterior?
  2. ¿Cómo puedo asegurarme de que AppleScript convierta correctamente la marca de tiempo de mi formato al formato respectivo utilizado por el dispositivo del usuario final?

La conversión adecuada se vuelve crítica si el formato de la fecha cambia al anteriormente mencionado dd/mm/yy y se utiliza en un mm/dd/yy entorno (región o país). En ese caso, el orden puede no ser evidente.

Ejemplo de caso

property someDate : date "02/01/18" como dd/mm/yy se codificaría con la intención de representar 02 de enero de 2018 pero cuando se utiliza en una región diferente (los que utilizan mm/dd/yy ); naturalmente, esto se convertirá en 01 de febrero de 2018 . ¿Ves el problema?

Como mi investigación sobre esto no lleva a ninguna parte rápidamente (y debe ser específica para AppleScript), espero que alguien que haya implementado un código similar pueda ayudarme a aclarar los dos puntos anteriores. Gracias.

0 votos

Bien, poniendo mi sistema en Nueva Zelanda, donde creo que vives, y compilando property someDate : date "Monday, 1 January 2018 at 01:00:00 PM" en el editor de script la `at` se elimina, pero compila. También current date devuelve el mismo formato pero sin el at . Dicho esto, volviendo a mi configuración normal no compila y devuelve Syntax Error Invalid date and time date Monday, 1 January 2018 at 01:00:00 PM. . Yo que tú respondería a la pregunta que hice anteriormente, que era: ¿Por qué estás poniendo un property a un fijo date ¿Qué propósito tiene en la script ?

0 votos

Mi intención es codificar una fecha base a partir de la cual se puedan calcular otras (por ejemplo, los días que faltan para esta fecha de caducidad). El uso de una propiedad parece apropiado ya que no debería cambiar una vez compilada; sin embargo, supongo que set someDate to date "..." también funcionaría (así no me limitaría a una declaración de propiedades). Espero que esto responda a la última parte. Otra forma podría ser set someDate to the current date set the month of someDate to 1 set the day of someDate to 2 set the year of someDate to 2018 . Esperando no sólo escribir una marca de tiempo concisa, sino también aprender la forma correcta de implementar una solución global.

0 votos

Tenía la sensación de que eso es lo que estabas haciendo. Una de las formas es grabar el current date en tiempo de la época a un archivo plist y utilizar ese valor para calcular contra. Supongo que se podría almacenar en una propiedad en la primera ejecución. De cualquier manera usted sería capaz de calcular en contra de ella.

2voto

wch1zpink Puntos 11

A mí me funciona con la última versión de Sierra

--property the_date : current date
property the_date : date ("Sunday, May 31, 2009 at 4:00:00PM")
property the_year : year of the_date
property the_day : day of the_date
property the_month : month of the_date
property the_hours : hours of the_date
property the_minutes : minutes of the_date
property the_seconds : seconds of the_date
property shortDateString : missing value

make_date(the_year, the_month, the_day, the_hours, the_minutes, the_seconds)

set shortDateString to short date string of the_date
set timeString to time string of the_date
set systemDate to date string of date shortDateString
log timeString
log shortDateString
log systemDate

on make_date(the_year, the_month, the_day, the_hours, the_minutes, the_seconds)
    --set the_date to current date
    set year of the_date to the_year
    set day of the_date to 1
    set month of the_date to the_month
    set day of the_date to the_day
    set hours of the_date to the_hours
    set minutes of the_date to the_minutes
    set seconds of the_date to the_seconds
    return the_date
end make_date

En este script, establezco un valor de fecha predeterminado como variable. Con mi región configurada como Estados Unidos, en las preferencias del sistema, ejecuté el script y registré los resultados. Las tres primeras líneas de los resultados en la siguiente imagen, fueron los valores devueltos con mi sistema establecido en la región de Estados Unidos. A continuación, volví a las preferencias del sistema y cambié mi región a Hungría y ejecuté el script de nuevo. Las últimas tres líneas de los resultados en la imagen, reflejan los valores de fecha y hora como si estuviera en un ordenador en Europa (Hungría)

enter image description here

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