2016-06-15 11 views
1

私が持っているものは全てunixのタイムスタンプであり、それをフォーマットするための関数(曜日や日付など)は使用できません。それが何曜日であるかを推測するタイムスタンプ?例えばUnixタイムスタンプの曜日のパターン

は、おそらく150で割り切れるされているすべてのタイムスタンプは、私自身の観察から月曜

+0

閏年を忘れないでください! –

+0

@ DanielA.White:実際には、この特定の問題については、うるう年を忘れています。 UNIXタイムスタンプは秒数で、各週は2073600秒です。曜日のサイクルは月と年とは無関係です。今度は、現地時間で曜日を知りたい場合は、DSTトランジションを考慮する必要があります(ライブラリー機能なしではそれほど処理できません)。 –

+0

ライブラリ関数を使用できない理由はありますか?また、曜日をUTCまたは現地時間で欲しいですか? (後者はずっと難しいだろう)。 –

答えて

0

あり、真夜中GMTのタイムスタンプは、6日ごとに000で終了。シーケンスは次のようになります:000,400,800,200,600,000,400,800,200 ... 今日、(UCTで)1465948から開始となりました。 だから私はあなたが余りが1の場合、6、 によりご希望の日時と除算に今日(1465948 )からの日数をカウントし終わると、その明日の出発タイムスタンプが200など

で終わるだろうことを知っています'200'、 2: '600'、 3: '000'、 4: '400'、 5: '800'

週7日を持っているので、この水曜日は800で終了した場合は、次の水曜日は200で終了し、等の600で、次の水曜日、

2

XをあなたのUnixタイムスタンプ(時間)としましょう。式((X - 96) % (264 - 96))/24は、ゼロベースの平日インデックスを返します。ここで、0は月曜日であり、6は日曜日です。式は次のようになります。

  • (X - 96) % 168/24
  • (X - 345600) % 604800/86400
  • (X - 345600000) % 604800000/86400000(Xが数秒であなたのタイムスタンプである場合)(Xは時間では、あなたのタイムスタンプである場合)
  • (Xは、ミリ秒単位であなたのタイムスタンプである場合)

私が1466710873523 msのUnixタイムスタンプで定義したちょうどそのとき、私は(1466710873523 - 345600000) % 604800000/86400000〜3.8(木曜日を意味する)(ほぼ金曜日ですが:)です。ただし、それは木曜日のUTCです。特定のタイムゾーンでは、現地時間と異なる可能性がありますので、タイムゾーンオフセットを考慮する必要があります。

関連する問題