4

「UTC 時刻 (01/01/0001 00:00:00 以降)」が何回経過したかを知りたいサードパーティ サービスと統合しようとしています。

ダニとは何ですか?

それが 1 秒であると仮定すると (それがどうかはわかりません)... 01/01/0001 00:00:00 からどのようにすればよいでしょうか? これは 32 ビット整数よりも大きいです。64 ビット整数よりも大きいかどうかはわかりませんが、PHP の date() 関数は 64 ビット整数ではなく 32 ビット整数を返します。

01/01/0001 00:00:00 から UNIX エポックまでに経過した秒数がわかっている場合は、bcmath または gmp を使用して、その量を (定数として) time() に追加できます (ここでもティックが秒であると仮定します)。その数がどうなるかわかりません。

何か案は?

4

3 に答える 3

3

.NET フレームワークは DateTime.Ticks を認識しているため、.NET で記述されたサービスを期待しています。ドキュメントには、目盛りについて次のように記載されています。

1 つのティックは、100 ナノ秒または 1 千万分の 1 秒を表します。ミリ秒には 10,000 ティックがあります。

このプロパティの値は、DateTime.MinValue を表す 0001 年 1 月 1 日の真夜中の 12:00:00 から経過した 100 ナノ秒間隔の数を表します。うるう秒に起因するティック数は含まれません。

したがって、01/01/0001 00:00:00 から 10.000.000 までに数秒かかることになります。

私は値を見つけました:

621,355,968,000,000,000

このSO postの 01-01-0001T00:00:00 から 01-01-1970 までのティック。どのように計算されているかわかりません。.NETフレームワークがそれを出力すると思います。あなたが言及したように、値を確認し、PHPで定数として宣言することをお勧めします。

PHP の int 型は符号付き整数です。そのサイズは、使用しているシステムによって異なります。64 ビット システムの場合、値の範囲は目的に十分な大きさにする必要があります。そうでない場合は、GMP 拡張機能またはBC Math拡張機能を使用して、多数の作業を行うことができます。

于 2013-01-14T23:42:00.680 に答える
1

「ティック」の標準的な定義はありません。秒、50 分の 1、60 分の 1、または 100 分の 1 秒、ミリ秒、またはその他の細分数を意味する可能性があります。詳細については、サービス プロバイダーに問い合わせる必要があります。

彼らがあなたに 1 年目から数えてほしいと望むなら、それは他のあらゆる種類の面倒な問題を引き起こします。なぜなら、グレゴリオ暦 (現在私たちが使用しているもの) は 1582 年まで導入されていなかったからです! (また、UTC の概念は 1961 年まで標準化されていませんでした。) サービス プロバイダーは、カレンダーの変更を考慮している場合と考慮していない場合があります。

これらすべてを確認する簡単な方法の 1 つは、現在 (または他の最近の基準日) に対応する値を尋ねることです。

于 2013-01-14T23:57:21.407 に答える
-2

Unix 時間は 1970 年 1 月 1 日から経過した秒数です。もちろん、タイムスタンプを追加するために bcmath などの特別なライブラリを使用できます。Unix 時間は UTC 時間より 1970 年遅れているため、定数は 1970*365*24*60*60 秒になります。

于 2013-01-14T23:37:49.880 に答える