Perilaku tanggal hard-coded di AppleScript


3

Saya mendesain AppleScript yang berisi tanggal hard-coded yang menjadi acuan skrip beberapa kali selama durasi eksekusi. Contohnya adalah sebagai berikut:

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

Seperti yang dapat dilihat, format cap waktu sesuai untuk wilayah dan negara saya. Contoh lain adalah: Saturday, April 15, 2006 4:29:04 PMatau 12/25/04- yang merupakan format untuk wilayah lain seperti AS - mm/dd/yy.

Pertanyaan-pertanyaan berikut muncul

  1. Jika AppleScript saya akan dijalankan di wilayah / negara lain (yang dengan format timestamp yang berbeda mis. mm/dd/yyAlih-alih saya dd/mm/yy), bagaimana AppleScript berperilaku dengan deklarasi di atas?
  2. Bagaimana saya harus memastikan bahwa AppleScript akan dengan benar mengubah timestamp dari format saya ke format masing-masing yang digunakan oleh perangkat pengguna akhir?

Konversi yang tepat menjadi kritis jika format tanggal berubah menjadi yang disebutkan sebelumnya dd/mm/yydan kemudian digunakan dalam mm/dd/yylingkungan (wilayah atau negara). Dalam hal ini, urutannya mungkin tidak jelas.

Contoh Kasus

property someDate : date "02/01/18"seperti yang dd/mm/yyakan dikodekan dengan maksud mewakili 02 Januari 2018 , tetapi ketika digunakan di wilayah yang berbeda (yang menggunakan mm/dd/yy); secara alami, ini akan menjadi 01 Februari 2018 . Lihat masalahnya?

Karena penelitian saya mengenai hal ini mengarah pada hal yang sangat cepat (dan harus spesifik untuk AppleScript), saya berharap seseorang yang telah menerapkan kode yang sama dapat membantu saya dalam mengklarifikasi dua poin di atas. Terima kasih.


Oke, setel sistem saya ke Selandia Baru, tempat saya yakin Anda tinggal, dan kompilasi property someDate : date "Monday, 1 January 2018 at 01:00:00 PM"di Script Editor `at` dihapus, tapi kompilasi. Juga current datemengembalikan format yang sama tetapi tanpa at. Yang mengatakan, mengaturnya kembali ke pengaturan normal saya tidak mengkompilasi dan mengembalikan Syntax Error Invalid date and time date Monday, 1 January 2018 at 01:00:00 PM.. Saya yang Anda akan menjawab pertanyaan yang sebelumnya saya tanyakan, yaitu: Mengapa Anda menetapkan a propertyke fix date, apa tujuannya dalam skrip ?
user3439894

Tujuan saya adalah untuk mengode tanggal dasar yang dapat digunakan untuk menghitung orang lain (misalnya hari hingga tanggal kedaluwarsa ini). Menggunakan properti tampaknya tepat karena tidak boleh berubah setelah dikompilasi; Namun, saya kira set someDate to date "..."akan bekerja juga (sehingga tidak membatasi diri saya pada deklarasi properti). Saya harap itu menjawab bagian terakhir. Cara lain bisa jadi 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. Berharap tidak hanya menulis cap waktu singkat tetapi juga mempelajari cara yang tepat untuk mengimplementasikan solusi global.
ProGrammer

Saya punya perasaan itulah yang Anda lakukan. Salah satu caranya adalah dengan mencatat waktu current datedalam jaman ke file plist dan menggunakan nilai itu untuk menghitung. Saya kira itu bisa disimpan di properti saat dijalankan pertama kali. Apa pun cara Anda dapat menghitungnya.
user3439894

Saya melihat pemikiran Anda tetapi itu tidak baik sebagai validasi jika dapat disesuaikan dengan mengedit file plist. Saya pikir saya akan memberikan opsi alternatif (disebutkan dalam komentar saya sebelumnya) mencoba, mungkin dengan cara itu semua dapat terkandung dalam satu dokumen dan bekerja di seluruh wilayah. Saya tidak bisa memikirkan cara "aman" lainnya untuk mencapai konversi yang tepat.
ProGrammer

Saya tidak pernah mengatakan itu bagus, hanya satu cara pengembang melakukannya! Anda dapat mengaturnya propertytetapi melakukannya dalam waktu yang sangat singkat dan bukan tanggal yang dapat dibaca manusia seperti yang Anda coba lakukan.
user3439894

Jawaban:


2

Ini berfungsi untuk saya menggunakan Sierra versi terbaru

--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

Dalam skrip ini, saya menetapkan nilai tanggal yang telah ditentukan sebagai variabel. Dengan wilayah saya diatur ke Amerika Serikat, dalam preferensi sistem, saya menjalankan skrip dan mencatat hasilnya. Tiga baris pertama hasil dalam gambar berikut, adalah nilai yang dikembalikan dengan sistem saya yang ditetapkan ke wilayah Amerika Serikat. Selanjutnya saya kembali ke preferensi sistem dan beralih wilayah saya ke Hongaria dan menjalankan skrip lagi. Tiga baris terakhir hasil dalam gambar, mencerminkan nilai tanggal dan waktu seolah-olah saya menggunakan komputer di Eropa (Hongaria)

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.