AppleScript:秒なしで時間を取得する方法は?または、文字列の途中のテキストを削除する方法は?


3

次のコードを使用する場合:

set CurrentTime to (time string of (current date))

CurrentTimeをは次の形式で設定されます。

12:02:38 PM

しかし、私はCurrentTimeを次のようにします。

12:02 PM

そのため、文字列の6、7、および8桁の文字を削除します。

AppleScriptでこれをどのように実現できますか?ありがとうございました。

回答:


3

次のようなものを使用できます。

set CurrentTime to (do shell script "date +\"%l:%M %p\" | awk '{$1=$1;print}'")

cybercitiには詳細dateとその修飾子があります。

%l - hour (1..12)
%M - minute (00..59)
%p - locales equivalent of either AM or PM; blank if not known

解決策をありがとう。コマンドにより、時間の数値の形式がわずかに変更されます。「3:16:47 PM」の代わりに「03:16 PM」が返されます。前にゼロのない1桁の時間(つまり、(現在の日付)の時間文字列と同じ形式 )を使用することは可能ですか?
ルービックの球

@ rubik'ssphereが回答を更新しました。時間形式には%l(小文字のL)を使用します。
マテウスシュロセク16年

ゼロはなくなりましたが、文字列の前にスペースが追加されます。たとえば、「3:16 PM」。スペースがないことは可能ですか?
ルービックの球体

@ rubik'ssphereを追加awkして、先頭のスペースをトリミングします。
マテウスシュロセク16年

3

ここに、私が見つけたAppleScript サブルーチンがあります。これは、あなたが尋ねたものを実行するGoogle検索を実行しています。

on getTimeInHoursAndMinutes()
    -- Get the "hour"
    set timeStr to time string of (current date)
    set Pos to offset of ":" in timeStr
    set theHour to characters 1 thru (Pos - 1) of timeStr as string
    set timeStr to characters (Pos + 1) through end of timeStr as string

    -- Get the "minute"
    set Pos to offset of ":" in timeStr
    set theMin to characters 1 thru (Pos - 1) of timeStr as string
    set timeStr to characters (Pos + 1) through end of timeStr as string

    --Get "AM or PM"
    set Pos to offset of " " in timeStr
    set theSfx to characters (Pos + 1) through end of timeStr as string

    return (theHour & ":" & theMin & " " & theSfx) as string
end getTimeInHoursAndMinutes

set CurrentTime to getTimeInHoursAndMinutes()

1

AppleScriptのみのオプションの1つは次のとおりです。

# your line
set CurrentTime to (time string of (current date))
# place all the words of the time string into a list
set EveryWord to every word of CurrentTime
# do a very basic test on what we got and assemble the string using the parts plus separators
if length of EveryWord = 4 then
    # if we have 4 words, there must be a form of AM/PM
    set CurrentTime to item 1 of EveryWord & ":" & item 2 of EveryWord & " " & item 4 of EveryWord
else
    # 24-hour clock
    set CurrentTime to item 1 of EveryWord & ":" & item 2 of EveryWord
end if

それは興味深い方法ですが、else ブランチ時間要素24時間current dateは表示されず、常にor があるため、ブランチはおそらくトリガーされません。情報を取得する場所からデフォルトを変更できる可能性があると思いますが。AMPMcurrent date
user3439894

current date現在設定されているローカライズの日付と時刻を返します。それを頼りに米国のやり方で応答し、私のスクリプトが同僚のコンピューターで動作しなくなったとき、私はそのことを痛々しく知りました。テスト中、システムクロックを24時間に設定すると、出力が変更されることがわかりました。それどころかhours of (current date)、真夜中(= 24時間)から経過した時間を常に返します。そのため、現在の日付と時刻を確認するときは、日付と時刻の部分を使用することをお勧めします。さらに、それを好きなように出力できるという利点もあります。
フェニックス

デフォルト設定と米国英語を使用しています。current dateたとえば、[ 2016年11月14日月曜日9:44:45 AM ] [] [24時間クロックを使用] チェックボックスをオンにしているかどうかに関係なく 、コメント。私のシステムでは、else ブランチはトリガーされません。
user3439894

まず、作業している各コンピューターで同じシステム設定を使用している場合、おそらく遭遇することはありません。また、時計メニューの時間表示を余分に変更しても、それ以外は変更されません。[言語と地域]に移動して、[時間形式[x] 24-Hour Time]オプションを有効にする必要があります。私の例のスニペットは、「AM」と「PM」の表示を持つものだけでなく、OPの目的の出力を持つすべてのコンピューター(またはそれらの地域の対応物)で実行されます。もしこれがあなたに起こらないなら、あなたのために働いている状態を自由に使って、残りを取り除いてください。
フェニックス

「[言語と地域]に移動して[時間形式[x] 24時間]オプションを有効にする必要があります。]と言いましたが、その場所にはチェックボックスがありません。とにかく私がすでに言ったように、あなたの答えはルビーの球体が使用する興味深い方法と別の方法を提供します。
user3439894

0

これは単純ですが、これを使用して同様の問題を解決しました。これは例で機能します。AMまたはPMを削除し、不要な文字を削除してから、AMまたはPMを再び追加します。最後の行では、表示ダイアログを使用して結果を表示しています。

set CurrentTime to (time string of (current date))
set revisedTime to CurrentTime as string
set myAMPM to text -1 thru -3 of revisedTime
set revisedTime to text 1 thru -7 of revisedTime
set revisedTime to revisedTime & myAMPM
display dialog revisedTime
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.