AppleScriptで取得する時間を操ってみる-NSDate- [AppleScript辞書はつくれるか?]
AppleScriptでオブジェクトを使うと、日時の値がまちまちな時がある。
あるときは『スタンダードなDate値』だったり、『NSDate型』だったりと変化してしまいます。
しかも、NSDateの値だとそのままではAppleScriptで使うことができない。時間などを直接に取り出すことができない。
なので、どの型であっても自動で統一させてみようかと思った。
スクリプトエディタ.app |
use scripting additions use framework "Foundation"
set aDate to current date -- "12:05" でも、date "2022/5/24" でも、NSDate形式でも可能 set output to my dateTextFormatter(aDate) output
on dateTextFormatter(aDate) (* date形式、日時テキスト、NSDate形式 に対応した フォーマッター経由の日時テキストへの変換 *) try if (class of aDate) = text then set aDate to date aDate --"12:34"のようなTEXTで入力された場合に対応 on error log "日時への変換に失敗しました" return false end try set aFormatter to current application's class "NSDateFormatter"'s alloc()'s init() aFormatter's setLocale:(current application's class "NSLocale"'s alloc()'s initWithLocaleIdentifier:"ja_JP") aFormatter's setDateFormat:"yyyy年M月d日 EEEE H:m:s" set theTimeString to (aFormatter's stringFromDate:aDate) as string return theTimeString --テキスト形式で返します end dateTextFormatter
-- 結果:"2022年05月24日 火曜日 12:34:46" |
上記では、入力がどんな形のDate値でもテキストとして出力できるようにした一例だが、下記のような設定を
色々いじれば、さまざまなカタチで作れるはずだ。
(色々な設定のしかた)
--set aDate to current application's class "NSDate"'s alloc()'s init() --(current date) NSDateの初期化時に現在の日時が入る
set aDate to current application's class "NSDate"'s |date|() --(current date)現在の日時の取得
set aFormatter to current application's class "NSDateFormatter"'s alloc()'s init()
-- ×:YYYY ◯:yyyy --YYYYはなぜか年末に年の数字だけが変わる場合がある (*1)
-- aFormatter's setDateFormat:"yyyy年M月d日 H時間m分s秒" --"2022年05月24日 11時間42分44秒"
-- aFormatter's setDateFormat:"yy年M月d日 H時間m分s秒" --"22年05月24日 11時間42分44秒"
-- aFormatter's setDateFormat:"yyyy/M/d H:m:s" --"2022/05/24 11:42:44"
-- aFormatter's setDateFormat:"yyyy/M/d H:m:s.SSS" --"2022/05/24 11:42:44.789"
aFormatter's setDateFormat:"yyyy年M月d日 EEEE H:m:s" --"2022年05月24日 火曜日 11:42:44"
-- aFormatter's setDateFormat:"E" -- "E"~"EEE" --> "火"
-- aFormatter's setDateFormat:"EEEE" --"火曜日"
aFormatter's setTimeZone:(current application's class "NSTimeZone"'s timeZoneWithAbbreviation:"JST")
--日本時間に設定
--aFormatter's setLocale:(current application's class "NSLocale"'s systemLocale())
--"2022年05月24日 Tue 11:42:44" (システム)
aFormatter's setLocale:(current application's class "NSLocale"'s alloc()'s initWithLocaleIdentifier:"ja_JP")
--"2022年05月24日 火曜日 11:42:44" (日本語)(*2)
-- (*1) 参考-日付がずれる:https://www.mt-megami.com/article/295203529
-- (*2) 参考-Locale:https://colo-ri.jp/develop/2011/12/ios-objective-c-get-each-locale-information.html (*2)
(Formatterで使える記号)
用途 |
文字 |
説明 例 |
紀元 |
G |
西暦 AD H S T M |
GGGG |
令和 平成 昭和 大正 明治 *和暦は和暦用Locateを指定 |
|
年 |
yy |
年の2桁 09 |
yyyy |
年の4桁 2009 |
|
月 |
M MM |
数字2桁 01 ~ 12 |
MMM |
数字2桁 英字3字 Jan ~ Dec |
|
MMMM |
1月 ~ 12月 英字 January ~ December |
|
日 |
d |
数字2桁 01~31 |
曜日 |
E |
日 月 火 水 木 金 土 Sun Mon Tue Wed Thu Fri Sut |
EEEE |
日曜日 ~ 土曜日 Sunday, Monday, Tuesday, Wednesday、 Thursday, Friday, Saturday |
|
午前/午後 |
a |
午前 午後 PM |
時(0~23) |
H |
|
時(1~24) |
k |
|
午前/午後の時(0~11) |
K |
|
午前/午後の時(1~12) |
h |
|
分 |
m |
00 ~ 59 |
秒 |
s |
00 ~ 59 |
ミリ秒 |
S |
0 ~ 999 |
タイムゾーン |
z zzzz |
JST Japan Standard Time |
年における週 |
w |
1月第1週からの週 |
月における週 |
W |
当月の第何週か |
年における日 |
D |
1月1日からの日数 |
月における曜日 |
F |
当月の何回目の曜日か |
一度覚えてしまえば、他にも色々と使い所があるかもしれない。
コメント 0