数年前、私は私達のファイルサーバー上でこのファイルを見つけました。
そして、1641年にファイルが作成されたと言うのはどうしてだろうか。私の知る限りでは、PC上の時間は1970年1月1日からの秒数で定義されます。そのインデックスが故障した場合、あなたは1969年12月31日を得ることができます。一見ランダムな日付、それはアメリカ合衆国の設立さえ前に。
それでは、1641年にファイルの日付を記入するにはどうすればよいでしょうか。
シモンズ:日付はフランス語です。フェブリエは2月です。
Windowsはファイル修正タイムスタンプ nixシステムのように を保存しません。 Windows Dev Center (私の強調点)によると、
ファイル時間は、午前12:00から経過した100ナノ秒の間隔の数を表す64ビット値です。 1601年1月1日世界協定時刻(UTC)。システムは、アプリケーションがファイルを作成、アクセス、およびファイルに書き込むときのファイル時間を記録します。
したがって、ここで間違った値を設定することで、1600年代から簡単に日付を取得することができます。
もちろん、もう1つ重要な質問があります。この値はどのように設定されたのですか。実際の日付は?それは単にファイルシステムドライバの計算エラーである可能性があるので、私はあなたが見つけることができないだろうと思うでしょう。 別の答えの仮説 は、日付は実際にはWindowsのタイムスタンプとして解釈されるUnixタイムスタンプであるが、実際には異なる間隔(秒とナノ秒)で計算されているということです。
64ビットのデータ型を使用することは、Windowsが(一般的に)伝統的なUnixシステムが持っている 2038年問題 の影響を受けないことを意味します。 Windowsが持っている64ビット整数。 (これはUnixが数秒で動作し、Windowsがマイクロ/ナノ秒で動作しているにもかかわらずです。)
Windows まだ影響を受けます もちろん、古いバージョンのVisual Studioでコンパイルされた32ビットプログラムを使用する場合。
新しいUnixオペレーティングシステム すでに拡張済み データ型を64ビットにしたため、この問題は回避されました。 (事実、Unixのタイムスタンプは数秒で動作するので、新しいラップアラウンド日は今から2920億年になります。)
好奇心が強い人のために - これを計算する方法は次のとおりです。
@corsiKa
は、うるう年を差し引く方法を説明したものです。29247/365/4≈20何人かの人々は 実際にこれを設定しようとしました を持ち、同じ年を思い付きました。
あなたが推測についてあまりにもひどく感じないならば、私に説明をさせてください。そして「誰かが値をナンセンスに設定する」という意味ではなく、それは明らかに常に可能です:)
Unix時間は通常1970年以来の秒数を使用します。一方、Windowsはその開始年として1601年を使用します。そのため、問題が2回の変換で間違っていると仮定した場合(そしてそれは大きな仮定です!)、表現されるはずだった日付は実際には 2011年のいつか(1970 + 41)、1640(1601 + 41)に誤って変換されました。編集:実際には、私は最初の年にWindowsに間違いを犯した。実際の作成時間は2010年であるか、もう1つのエラーが関与している可能性があります(ソフトウェアでは1つずつのエラーがかなり一般的です)。
今年が問題のファイルに関連する追跡日のうちの別の日であることを考えると、私はそれがかなりもっともらしい説明だと思います:)
他の人が書いたように、 Windows Epochは1601-01-01 00:00です 。
そのエポックと表示されるファイル時間の間の秒数 は1.266.705.294 です。
それをUnix Epochに追加すると、土曜日の 2010-02-20 23:34:54 CEST に到達します。これは最終アクセス日の約1年前であるため、やや妥当と思われます。それで、それは間違ったエポックに対して解釈されたUnixタイムスタンプであったかもしれません。
これらの種類の質問ではいつものように、Raymond Chenのブログは「なぜWin32 Epochが1601年1月1日なのか」からこの答え を得ています。 2009年3月6日からのエントリー:
FILETIME
構造体は、1601年1月1日からの経過時間を100ナノ秒の間隔で記録します。その日付が選ばれたのはなぜですか?グレゴリオ暦は400年周期で動作し、1601年はWindows NTが設計されていたときにアクティブだった周期の最初の年です。言い換えれば、それは数学がうまく出てくるように選ばれました。
私は実際にこれを確認するDave Cutlerからの電子メールを持っています。