こんにちは、future_date変数を設定して、今日から90日後の日付を表示したいと思います。
set $future_date ""
#set $future_date to date in unixtime stamp 90 days from the current timestamp
tclでそれを行うことはできますか?
こんにちは、future_date変数を設定して、今日から90日後の日付を表示したいと思います。
set $future_date ""
#set $future_date to date in unixtime stamp 90 days from the current timestamp
tclでそれを行うことはできますか?
それを行う方法は、以下を使用することclock add
です。
# The [clock seconds] produces _now_
set future_date [clock add [clock seconds] 90 days]
set future_readable [clock format $future_date]
OK、その通りです。まず、一部の地域では約半年は機能しません。問題?DSTの変更があり、1日の長さが実際には一定ではないことを意味します(場合によっては、市民の日は23時間または25時間の長さです)。ただし、このような修正を適用するには、現在のタイムゾーンに関する知識が必要です(世界のさまざまな地域でさまざまなルールがあるため)。タイムゾーンは、zoneinfoデータベースを参照して指定されます。
set zone ":America/New_York"
set future_date [clock add [clock seconds] 90 days -timezone $zone]
set future_readable [clock format $future_date -timezone $zone]
# Normally should use the same timezone for each *unless* there's a
# business reason to do otherwise...
2番目の問題は、うるう秒が無視されることです。GPSソフトウェアや同等の感度のあるものを作成していない場合は、これがおそらくまさにあなたが望むものです(そして、本当に気にかけているのであれば、とにかく修正を適用するための適切なソフトウェア/アルゴリズムを持っているでしょう)。
3番目の問題は、これが8.5以降でのみ機能することです(clock
コマンドが実質的にゼロから書き直されたとき。時間処理で他のすべてのバグに対処するのに飽きて、自分たちだけのものにすることにしました!) 8.4(またはそれ以前!)次に、別の昆虫が必要です。
set future_date [clock scan "now + 90 days"]
set future_readable [clock format $future_date]
これは、タイムゾーンの処理が正しく行われず(現在のシステムタイムゾーンを使用するか、UTC [*]を使用する可能性があります)、非常に非自明なタイムストリングパーサーの上に構築されているため、お勧めできません。それでも、8.5より前の最良のオプションです。
[*]これがどれほど奇妙になるかを過小評価しないでください。サードパーティのプリンタードライバーのバグに対処したことを覚えています。このバグは、Windowsの別のプロセスに読み込まれると、印刷の実行が完了するまで、実行中のすべてのアプリケーションのシステムタイムゾーンを変更します。実際に何が起こっているのかを確認することさえ困難でした(後で私の顎を床から持ち上げたように)。
Tclでは、clock seconds
コマンドは現在の時刻を秒単位で返します。これに90日を追加するには、90に60(1分あたりの秒数)、60(1時間あたりの分数)、および24(1日あたりの時間数)を掛ける必要があります。
set today [clock seconds]
set future [expr {$today + 90 * 60 * 60 * 24}]
puts [clock format $today -format "Today is %B %m, %Y"]
puts [clock format $future -format "90 days from today is %B %m, %Y"]
clock
詳細については、コマンドを検索してください。