2009-03-30 11 views
0

Windowsシステムクロックを同期させる機能を持たせたいのですが、例えばシステム時刻が13:58でタイムサーバーが14:02、その場合は時間も変更する必要があります。問題は、ユーザーがいつでも(タイムゾーンに関係なく)時計を設定できるようにするためですが、それでも同期させるためには、タイムサーバーの時間/日などを使用したくないということです。時間は同期していますが、タイムゾーンは無視します

たとえば、WindowsのタイムゾーンがPSTで、ユーザーがタイムゾーンを変更せずに将来5時間を設定しても、システムを正しく同期させて今後5時間を維持したいと考えています。

分に応じて時間を前後に設定する必要があるかどうかを計算するアルゴリズムはありますか?システムが15:59で、サーバーが16:02の場合、システムは15:02ではなく16:02に設定する必要があります(これは分を変更しただけです)。システムが15:28で、サーバーが16:02の場合、システムは15:02に設定する必要があります。私はしばらくの間これを悩まされてきたが、私はそれについて行く方法の周りに私の頭を得るように見えることはできません!

私は既にタイムサーバーの日付と時刻、およびシステム時刻(私はデルファイを使用しています)を取得するコードを持っていますので、それをどうするか計算するだけです。

お時間をいただきありがとうございます。

+0

"ローカルタイム"から故意にクロックを設定する理由は何ですか?ユーザーは自分のタイムゾーンを適切なオフセットに変更できますか? –

答えて

3

これは、サーバーまたはクライアントのいずれかのタイムゾーンにかかわらず、クライアントマシンのUTC時刻をサーバーのUTC時刻と同じにすることだけです。

UTCに基づいて時刻を取得して設定するAPIが必要です。私は完全に将来的には自分のマシンに5時間を設定し、ユーザの観点からあなたの質問を理解していなかったので、、あなたが望むものではないかもしれないこと

...

+0

返信のおかげで、 は基本的に時計が意図的に将来/過去に設定される可能性があります。この場合、UTCを使用するのはおそらくオプションではないでしょうか?Windowsタイムゾーンに基づいて時刻を修正すると思われます。これは望ましい行動ではない。 –

+0

Windowsのタイムゾーンに基づいてそれを修正することはできません - それはUTCに基づいて修正されます。意図的にシステム時計を数時間使用する有効なユースケースはありますか?時間が30分であることがわかったら、それを30分前または後に移動すると思いますか? –

0

あなたはわずか数分を比較でき、 55歳以上でシステムが< 05の場合は、時間を増やしてください。他のエッジ条件にも同様のことをします。

2

時の境界にないいくつかのタイムゾーンがあることを忘れないでください...ユーザーの時計が13:30にあり、サーバーが13:00にある場合、ユーザーがニューファンドランドではないことをどのように知っていますかモントリオールではなく(言い換えれば)。

私はジョンのUTCの提案が道のりだと思います。

+1

確かに。 15分境界に揃った迷惑なものさえありますが、それはちょっとした時計と違うタイムゾーンにある時計の違いを伝える余裕がありません。 – bobince

2

サーバ時間を取得し、N時間を引いてローカル時間を設定します。問題はない。

時間は実数です。時間、分、秒などは単なるプレゼンテーション形式です。

タイムゾーンを計算に含める必要がある場合は、GpTimezonedescription)を使用してください。

関連する問題