2

まず第一に、私は職業上のコーダーではなく、ただのネットワーク エンジニアです :) しかし、私は自動化を大いに信じており、適切なタスクを処理するスクリプトを作成しようとしています。

データベース チェック スクリプトで使用するために、PowerShell で 10 分前の現在の UNIX タイムスタンプを取得しようとしています。これを使用して、現在の Unix 時間を取得しています。

$unixtime=[int][double]::Parse((Get-Date -UFormat %s))-600

しかし、UNIX 時間からローカル時間へのコンバーター (http://www.onlineconversion.com/unix_time.htm) を使用して実行すると、現在の時刻が GMT で取得されます (たとえば、今すぐ実行すると、 「1340620608」を取得します。実際の時刻は 10:36 AM CDT ですが、コンバーターは 10:36 AM GMT と言っています)。これは、ローカル時間であるため、データベース内の Unix タイムスタンプと比較するときに明らかに問題を引き起こします。現在の GMT オフセットを計算してタイムスタンプに適用する関数を作成 (または検索) することはできましたが、これを行うためのより良い方法があるかどうか疑問に思っていました。

4

3 に答える 3

4

試す:

$unixtime=[int][double]::Parse($(Get-Date -date (Get-Date).ToUniversalTime()-uformat %s))

上記は、最初に現在のGMT時刻を取得してから、それを正しい形式に変換します。

于 2012-06-25T16:38:30.293 に答える
2

これはうまくいきますか?

(Get-Date).AddMinutes(-10).Subtract((Get-Date 1/1/1970)).TotalSeconds
于 2012-06-25T18:36:09.327 に答える
1

Unix タイムスタンプは、1970-01-01 00:00:00 GMTからの秒数として定義されます。

データベースのタイムスタンプが 1970 年の現地時間からの秒数として保存されている場合は、おそらくデータベースを修正する必要があります。ただし、データベースのタイムスタンプは、標準の UTC ベースの Unix タイムスタンプである可能性があります。

システムの時刻とタイムゾーンの設定も確認する必要があります。お使いのコンピュータが GMT を現地時間として扱っている可能性があります (その時計は数時間ずれている可能性があります)。

于 2012-06-25T16:31:47.883 に答える