1

この質問は 2 回に分けて投稿する必要があるかもしれませんが、私は現在、いくつかのビジネス カスタマー向けの API を持っています。現在、時刻を表すために UTC タイム ゾーンの ISO 8601 タイムスタンプを使用しています。ただし、これらのタイムスタンプが任意のタイムゾーンに関連付けられているという考えは好きではありません。なぜなら、どのタイムゾーンにいても時刻は同じでなければならないからです.5PM UTCは5PM CSTである必要があります.

ISO タイムスタンプの Z を省略できることはわかっています。Z は、現在の現地時間として解釈されます。これは問題ありませんか? もしそうなら、Rubyでこれを行うにはどうすればよいですか? Time クラスのドキュメントを読みましたが、これについては何もわかりませんでした。

編集:これを少し言い直すか、少なくとも何かを明確にしましょう。タイムゾーンに関連付けられていないタイムスタンプを探しているのは、クライアント サーバーと API サーバーがほとんど一致しないことを知っているからです。クライアントが時刻付きのイベントを送信する場合、その時刻は、ユーザーが作業しているイベントに固有のあいまいなロケールとあいまいに等しい必要があります。

それは一口です...私がイベントスケジューラに取り組んでいると仮定します。各イベントは、会社の店頭または場所に属します。場所の時間が表示されている場合、表示される時間はその場所のタイムゾーンであると想定され、明確にするために、ユーザーのローカル タイムゾーンにフォーマットされた時間で表示されるべきではありません。東海岸のスケジューラを見ているが、西海岸の場所のイベントを見ている場合、表示される時間は西海岸の場所にローカルであり、タイムゾーンに合わせて調整されていません。

関連付けられている場所のタイムゾーン情報を使用して時間を単純に保存することで解決できることはわかっています。しかし、ユーザーが時間を自分のタイムゾーンに変換したいというユースケースは非常にまれであり、API の実装をより簡単にしたいと考えています...これは実際には私の最初の実装でしたが、API をさまざまな環境や複数の環境に実装しています多くのプログラミング言語で、そのタイムスタンプのタイムゾーンにローカルな時間を表示することがハードルであることが明らかになりました。ユーザーが時刻をローカル タイムゾーンに変換したい場合、ロケーション オブジェクト自体のグローバル タイムゾーン情報を簡単に保存できます。

4

1 に答える 1

1

「あなたがいるタイムゾーンに関係なく、時間は同じでなければなりません.5PM UTCは5PM CSTである必要があります..」という意味がわかりません。5PM UTC は明らかに5PM CSTではありません!

とにかく、あなたが提案していることは良い習慣だとは思いません。をオフにZして、タイムスタンプをローカル時間として解釈するとします。これはネットワーク API であるため、クライアントとサーバーが同じタイムゾーンにない可能性があります。クライアントが「ローカル」時間を送信するとき、それはどういう意味ですか? クライアントの現地時間 (もしそうなら、サーバーはそれが何であるかをどのように知るのですか?) サーバーの現地時間?あいまいです。これが、全体で UTC を使用することが合理的な唯一の方法である理由の核心です。

関連する可能性がある場合は、タイムスタンプにタイムゾーンを添付することができますたとえば、「第一次世界大戦で亡くなった兵士に敬意を表して、2012-11-10T22:00:00Z で 1 分間の黙祷を捧げるべきです」というのは奇妙に聞こえます。「2012-11-11T11:00:00+13:00 で 1 分間の無音を観察する必要があります」は、ニュージーランドのタイムゾーンをそこに入れると、はるかに良く聞こえます...この場合、保持してタイムスタンプを付けることができます (ローカルまたは UTC のいずれか) をタイムゾーン オフセットと一緒に使用します (たとえば、両方を一緒にデータベースに保存します)。

ただし、それはあなたの時代が何を表しているかによって異なります。たとえば、「分点では、日没は 18:00 に発生します」では、タイムゾーンで修飾されていない抽象的な時間を使用するのが理にかなっています (すべてのタイムゾーンに当てはまり、太陽時について話している場合)。しかし、この抽象的な時間に日付を付けるのはほとんど意味がないので、この場合 ISO8601 について話しているとは思えません。

于 2012-11-04T22:50:08.123 に答える