Network Working Group S. Glassman Request for Comments: 2550 M. Manasse Category: Stinkards Track J. Mogul Compaq Computer Corporation 1 April 1999 Y10K and Beyond 10000年問題と更にその先を越えて Status of this Memo この文書の位置付け This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited. この文書はインターネットコミュニティに対して情報を提供する。 これは なんらかのインターネット標準を規定するものではない。 この文書の配布 には制限を設けない。 Copyright Notice 著作権表記 Copyright (C) The Internet Society (1999). All Rights Reserved. Abstract 要約 As we approach the end of the millennium, much attention has been paid to the so-called "Y2K" problem. Nearly everyone now regrets the short-sightedness of the programmers of yore who wrote programs designed to fail in the year 2000. Unfortunately, the current fixes for Y2K lead inevitably to a crisis in the year 10,000 when the programs are again designed to fail. この1000年期の終りに直面して、”Y2K(2000年問題)”と呼ばれるものに 多大な関心が寄せられている。 ほとんど誰もが今になって、2000年に障害を おこすようになっているプログラムを書いた昔のプログラマー達の近視眼的 思考を後悔している。 残念ながら、Y2Kのための現在の修正は10000年には プログラムが再び障害を起こすという避け得ない破局につながる。 This specification provides a solution to the "Y10K" problem which has also been called the "YAK" problem (hex) and the "YXK" problem (Roman numerals). この記述は"Y10K(10000年問題)”の解決方法を提供する。 なお、"Y10K"は "YAK(16進数表記)"や"YXK(ローマ数字表記)”とも呼ばれる。 1. Introduction, Discussion, and Related Work 序章、議論および関連研究 Many programs and standards contain, manipulate and maintain dates. Comparing and sorting dates is a common activity. Many different formats and standards for dates have been developed and all have been found wanting. 多くのプログラムと標準は時刻の操作や維持を含んでいる。 時刻表現の比較 やソートは一般的な作業である。 時刻表現のための多数の異なるフォーマットや 標準が開発されてそれら全てが改善されるべき点がみられる。 Early date formats reserved only two digits to represent the year portion of a date. Programs that use this format make mistakes when dealing with dates after the year 2000. This is the so-called Y2K problem. 初期の時刻フォーマットは時刻表現の年の部分を表現するために2桁のみを予約 した。 このフォーマットを使用するプログラムは2000年以後の時刻表現を扱う 時に誤りを生じる。 これはY2K問題と呼ばれる。 The most common fix for the Y2K problem has been to switch to 4-digit years. This fix covers roughly the next 8,000 years (until the year 9999) by which time, everyone seems convinced that all current programs will have been retired. This is exactly the faulty logic and lazy programming practice that led to the current Y2K problem! Programmers and designers always assume that their code will eventually disappear, but history suggests that code and programs are often used well past their intended circumstances. Y2K問題に対する最も一般的な修正は4桁に変更することである。 この修正は 次のほぼ8000年(9999年まで)の時刻表現を保証し、誰もがその時には現在の 全てのプログラムが既に使用されていないと確信しているようである。 これは全く誤った論理であり、現在のY2K問題へつながる怠惰なプログラミング の習慣である。 プログラマーと設計者は常にそれらのコードが最終的には 消滅すると仮定するが、歴史はコードとプログラムが大抵は過去に意図された 状況で使用され続けたことを示している。 The 4-digit year leads directly to programs that will fail in the year 10,000. This proposal addresses the Y10K problem in a general way that covers the full range of date and time format issues. 4桁の年は直接的に10000年に障害を起こすプログラムへとつながる。 この 提案はY10K問題を完全な範囲の時刻と時刻フォーマット問題に対応して汎用 的な手法で解決する。 1.1 Current approaches 現在のアプローチ A large number of approaches exist for formatting dates and times. All of them have limitations. The 2-digit year runs into trouble next year. The 4-digit year hits the wall in the year 10,000. A 16-bit year runs out in the year 65,536. A 32-bit counter for the number of seconds since 1970 [UNIX] wraps in 2038. A 32-bit counter for the number of milli-seconds since booting crashes a Windows (TM) PC in 49.7 days [Microsoft]. 日付と時刻のフォーマットのために多数のアプローチが存在する。 それら 全ては制約を持つ。 2桁の年は来年には問題を起こす。 4桁の年は10000年 には壁に突き当たる。 16ビットの年は65536年に尽きてしまう。 1970年からの 秒数の32ビットカウンタは2038年までを包括する。 ブートしてからのミリ秒 数の32ビットカウンタは49.7日でクラッシュする[Microsoft]。 In this specification, we focus on the Y10K problems since they are most common and a large number of existing standards and protocols are susceptible to them (section 7). These standards, and new proposals on their way, will lead to a serious world-wide problem unless efforts are made now to correct the computing, government, and business communities. この記述では、我々は最も一般的な既存の多くの標準とプロトコルが影響を 受ける(7章を参照)ために、Y10K問題に焦点を当ている。 これらの標準と それらに基づく新たな提案は今コンピュータ、政府、ビジネスの場で修正 しようという努力が為されない限り世界規模で深刻な問題になるであろう。 Already, a small cottage industry is popping up to deal with the Y10K problem [YUCK]. We encourage these efforts and, in the coming years, this effort can only grow in size and importance. 既に、小規模な産業ではY10K問題が浮上している[YUCK]。 我々はこれらの 努力を奨励し、いずれはこれらの労力が規模と重要度が増すかもしれない。 1.2 A Fixed Format Y10K Fix Y10K問題を解決するための固定的なフォーマット At the time of this writing, only one proposal [Wilborne] directly deals with the Y10K problem. In that proposal, dates are represented as decimal numbers with the dates compared numerically. The proposed format is simply YYYYYMMDD - i.e. 5-digit years. これを書いている時点で、[Wilborne]がY10K問題を直接扱う唯一の提案である。 この提案で、時刻表現は数値として比較される10進数で表現される。 提案 されたフォーマットは単にYYYYYMMDD。つまり5桁の年である。 To allow numerical comparison of dates, this representation requires a completely fixed representation for the date. There can be no optional fields, the date resolution is limited to the granularity of one day, and this solution fails in the year 100,000 (Y100K). 時刻表現の数値比較が可能であるために、この表現は時刻表現に対して完全に 固定的な表現を要求する。 オプションのフィールドは存在出来ず、時刻表現 の精度は一日の粒度に制限され、そしてこの解決方法は100000年に問題となる (Y100K)。 1.2.2 Limitations of Numerical Comparison 数値比較の限界 While sufficient for the specific Y10K problem, this solution is limited. Even if extended for 6-digit years, it fails on 32-bit systems (and future 32-bit system emulators) after the date represented by the number 2147481231 (December 31, 214748) leading to a Y214749 problem. Similarly, 64-bit and 128-bit systems also will fail, although somewhat later (after December 31, 922,337,203,685,477 and December 31, 17,014,118,346,046,923,173,168,730,371,588,410 respectively). Y10K特有の問題には充分であっても、この解決方法は限定的なものである。 年を6桁に拡張したとしても、それは32ビットシステム(及び将来の32ビット システムのエミュレータ)では問題となり、2147481231(214748年12月31日) の数値で表現される日付の後でY214749問題となる。 同様に、64ビットと128ビットシステムもいずれ障害を起こすが、それは少々後 になる(それぞれ、922,337,203,685,477年12月31日と17,014,118,346,046,923, 173,168,730,371,588,410年12月31日である)。 1.2.3 Granularity Issues 粒度の問題 The granularity problems of a fixed format date can be improved by extending the date format to include greater precision in the date. However, since numerical comparison of dates requires a fixed representation date, an extended format can not provide sufficient resolution for all foreseeable needs. 固定フォーマットの時刻表現の粒度の問題は時刻により大きな精度を持つ 時刻フォーマットに拡張することで改善することができる。 しかしながら、 時刻表現の数値比較は固定的な時刻の表現を要求され、拡張されたフォーマット は全ての予見される需要に充分な分解能を提供出来ない。 For instance, if the precision were extended to the femto-second range the date format would become YYYYYMMDDHHMMSSmmmuuunnnpppfff (year, month, day, hour, minute, second, milli-second, micro-second, nano-second, pico-second, and femto-second). The additional 21 digits of this format limit the set of representable dates. Compared to 1.2.2, the 32-bit and 64-bit forms of the date are instantly exceeded, while the 128-bit version would be viable - expiring on December 31, 17,014,118,346,046. 例えば、精度がフェムト秒の範囲にまで拡張された場合、時刻表現のフォー マットはYYYYYMMDDHHMMSSmmmuuunnnpppfff(年、月、日、時、分、秒、ミリ秒、 マイクロ秒、ナノ秒、ピコ秒、フェムト秒)になる。 このフォーマットの 追加の21桁の10進数は表現可能な時刻の集合を制限する。 1.2.2節の内容と 比較してみると、時刻の32ビットと64ビットの表現形態をすぐに越えてしまい、 128ビットバージョンならば実現可能 - 17,014,118,346,046年12月31日 - で あろう。 1.2.3.1 Extrapolation of Future Granularity Issues 将来の粒度問題の推測 However, a simple extrapolation of Moore's law shows that even femto-second resolution will soon be inadequate. Projecting current CPU clock speeds forward, a femto-second clock speed will be achieved in only 30 years. And, by the year 10,000 the projected clock speed of the Intel Pentium MMDCLXVI (TM) will be approximately 10 ** (- 1609) seconds. しかしながら、ムーアの法則に基づく単純な推測はフェムト秒の粒度でもすぐに 不適切になることを示している。 現在のCPUクロック速度の向上を反映させると、 フェムト秒のクロック速度はたった30年で得られる。 そして、10000年のインテル 社のPentium MMDCLXVI - 2666(TM)に反映したクロック速度は約10のマイナス 1609乗秒になるであろう。 This discussion clearly shows that any fixed-format, integer representation of a date is likely to be insufficiently precise for future uses. この議論は明らかに固定フォーマットの整数による時刻表現は将来の使用において 精度が不十分になるであろうことを示している。 1.2.3.2 Floating Point Is No Solution 浮動小数点は解決策にはならない The temptation to use floating point numbers to represent dates should be avoided. Like the longer fixed-format, integer representations of the date, floating point representations merely delay the inevitable time when their range is exceeded. In addition, the well known problems of real numbers - rounding, de-normalization, non-uniform distribution, etc. - just add to the problems of dealing with dates. 時刻を表現するために浮動小数点値を使用するという誘惑も避けるべきである。 大きな固定フォーマットの整数による時刻表現と同様に、浮動小数点表現は 単にその範囲を越える避けられない時を遅らせるだけである。 加えて、実数 のよく知られた問題 - 丸め、逆正規化、分布の非一様性など - が時刻を扱う 問題に加わる。 2 Structure of Y10K Solution Y10Kの解決法の構造 Any Y10K solution should have the following characteristics. Y10Kの解決法は以下の特性を持つべきである。 2.1 Compatibility 互換性 The format must be compatible with existing 4-digit date formats. Y2K compliant programs and standards must continue to work with Y10K dates before the year 10,000. Y10K compliant programs can gradually be developed over time and coexist with non-Y10K compliant programs. フォーマットは既存の4桁の10進数のデータフォーマットと互換性がなければ ならない。 Y2Kに対応したプログラムと標準は10000年の前ではY10Kによる時刻で 動作し続けなければならない。 Y10Kに対応したプログラムは段階的に開発出来て Y10Kに対応していないプログラムと共存出来る。 2.2 Simplicity and Efficiency 簡単さと効率性 Y10K dates must allow dates after 10,000 to be easily identified. Within a program, there must be a simple procedure for recognizing the Y10K dates and distinguishing them from legacy dates. Y10Kによる時刻表現は10000年以後でも容易に修正が可能でなければならない。 プログラム内では、Y10Kによる時刻表現を認識し、旧式の時刻表現と区別する ための簡単なプロシージャが存在しなければならない。 2.3 Lexical Sorting 辞書式ソート Y10K dates must be sortable lexically based on their ASCII representation. The dates must not require specialized libraries or procedures. Y10Kによる時刻表現はASCII表現に基づく辞書順でソート可能でなければならない。 時刻表現は特殊化したライブラリやプロシージャを要求してはならない。 2.4 Future Extensibility 将来の拡張性 Y10K dates must support arbitrary precision dates, and should support dates extending arbitrarily far into the future and past. Y10K dates from different eras and with different precisions must be directly comparable and sortable. Y10Kによる時刻表現は任意の精度の日付をサポートしなければならず、任意の 未来と過去に渡って時刻表現を拡張することもサポートすべきである。 異なる時代と異なる精度を持つY10K時刻表現は直接比較及びソートが可能で なければならない。 2.4.1 Environmental Considerations 環境に対する配慮 The known universe has a finite past and future. The current age of the universe is estimated in [Zebu] as between 10 ** 10 and 2 * 10 ** 10 years. The death of the universe is estimated in [Nigel] to occur in 10 ** 11 - years and in [Drake] as occurring either in 10 ** 12 years for a closed universe (the big crunch) or 10 ** 14 years for an open universe (the heat death of the universe). この宇宙は有限の過去と未来を持つことが知られている。 宇宙の現在の年齢は 10の10乗から2*10の10乗の間であると概算されている[Zebu]。 宇宙の死は 閉じた宇宙の場合には10の11乗年[Drake]から10の12乗年に起こる(ビッグ クランチ)と、そして開いた宇宙の場合には10の14乗年に起こる(宇宙の熱的 な死)と概算されている。 In any case, the prevailing belief is that the life of the universe (and thus the range of possible dates) is finite. どちらの場合でも、広く信じられていることは宇宙の寿命(と、とり得る時刻の 範囲)は有限であるということである。 2.4.2 Transcending Environmental Considerations 超越的な環境への配慮 However, we might get lucky. So, Y10K dates are able to represent any possible time without any limits to their range either in the past or future. しかしながら、我々は幸運である。 Y10K対応の時刻表現は過去にも未来にも その範囲に制限を課すことなく時刻を表現することが出来る。 Y10K compliant programs MAY choose to limit the range of dates they support to those consistent with the expected life of the universe. Y10K compliant systems MUST accept Y10K dates from 10 ** 12 years in the past to 10 ** 20 years into the future. Y10K compliant systems SHOULD accept dates for at least 10 ** 29 years in the past and future. Y10Kに対応したプログラムは宇宙の予想される寿命において一貫性をサポートする よう時刻表現の範囲を制限するよう選択してもよい。 Y10Kに対応したシステムは 過去10の12乗年から未来の10の20乗年までのY10Kに対応した時刻表現を受容しなけ ればならない。 Y10Kに対応したシステムは少なくとも過去及び未来の10の29乗年 間の時刻表現を受容しなければならない。 3 Syntax Overview 文法的な概観 The syntax of Y10K dates consists of simple, printable ASCII characters. The syntax and the characters are chosen to support a simple lexical sort order for dates represented in Y10K format. All Y10K dates MUST conform to these rules. Y10Kに対応した時刻表現の文法は単純で印刷可能なASCII文字からなる。 その文法と文字はY10Kフォーマットで表現される時刻の単純な辞書順ソート をサポートするよう選択されている。 全てのY10Kに対応した時刻表現はこれらの 規則を満たさなければならない。 Every Y10K date MUST begin with a Y10K year. Following the year, there MAY be an arbitrary sequence of digits. The digits are interpreted as MMDDHHMMSSmmmuuunnnpppfff... (month, day, hour, minute, second, milli-second, micro-second, nano-second pico-second, femto-second, etc. - moving left to right in the date, digits always decrease in significance). 全てのY10Kに対応した時刻表現はY10K内の年で始まる。 年に続き、任意の数字の 連続があってもよい。 その数字はMMDDHHMMSSmmmuuunnnpppfff(月、日、時 分、秒、ミリ秒、マイクロ秒、ナノ秒、ピコ秒、フェムト秒、時刻が左から右 へ常に大きさが減少する)。 All dates and times MUST be relative to International Atomic Time (TAI) [NRAO]. 全ての日付と時刻は国際原子時(TAI)[NRAO]に対して相対的でなければならない。 When comparing dates, a date precedes every other date for which it is a prefix. So, the date "19990401000000" precedes the date "19990401000000000". In particular, dates with the format YYYYMMDD are interpreted to represent the exact instant that the day begins and precede any other date contained in that day. 時刻表現を比較する時、年は他の全ての時刻のプリフィクスとなる。 つまり、 ”19990401000000”は”19990401000000000”の先になる。 特に、YYYYMMDDフォーマットを持つ時刻は一日が丁度始まる瞬間を表すと解釈 されてその一日に含まれる他の全ての時刻に優先する。 3.1 Years 1 - 9999 1から9999年 The current 4-digit year syntax covers all years from 1000 - 9999. These years are represented as 4 decimal digits. Leading 0's MUST be added to the years before 1000 to bring the year to 4 digits. Files containing legacy pre-Y1K [Mike] dates will have to be converted. 現在の4桁の年のシンタックスは1000から9999年までを包括する。 これらの年は 4桁で表現される。 1000年より前の年を4桁にするには0を付加しなければなら ない。 旧来の1000年以前の日付を含むファイルは変換される必要がある。 3.2 Years 10,000 through 99,999 10000から99999年 Four digits are not sufficient to represent dates beyond the year 9999. So, all years from 10,000 - 99,999 are represented by 5 digits preceded by the letter 'A'. So, 10,000 becomes "A10000" and 99,999 becomes "A99999". Since 'A' follows '9' in the ASCII ordering, all dates with 5-digit years will follow all dates with 4-digit years (for example, "A10000" will sort after "9999"). This gives us the sort and comparison behaviour we want. 4桁の10進数は9999年を越えた年を表現するには充分でない。 そこで、10000 から99999までの全ての年は'A'の文字を先に付けることで表現される。 その場合、10000年は”A100000”、99999年は”A99999”になる。 ’A’は ASCIIコードの順番で’9’の後になるので、5桁の年の日付は全て4桁の年の後 になる(例えば、”A10000”は”9999”の後になる)。 これは我々が望む ソートや比較の振る舞いを与える。 3.3 Years 100,000 up to 10 ** 30 10000から10の30乗年まで By a simple generalization of 3.2, 6-digit years are preceded by the letter 'B', 7-digit years by 'C', etc. Using just the 26 upper-case ASCII characters, we can cover all years up to 10**30 (the last year representable is "Z999999999999999999999999999999"). Again, since the ASCII characters are sorted alphabetically, all dates sort appropriately. 3.2節の内容を単純に一般化することにより、6桁の年は”B”の文字が、7桁の年 は”C”が先につく、というようになる。 ちょうど26の大文字のASCII文字を 使用することで、10の30乗まで(表現可能な最後の年は "Z999999999999999999999999999999"である)を包括出来る。 ここでも、ASCII 文字はアルファベット順にソート出来るので、全ての時刻表現は適切にソート される。 3.4 Years 10 ** 30 and beyond (Y10**30) 10の30乗年と更にその先 As discussed in 2.4.1, the end of the universe is predicted to occur well before the year 10 ** 30. However, if there is one single lesson to be learned from the current Y2K problems, it is that specifications and conventions have a way of out living their expected environment. Therefore we feel it is imperative to completely solve the date representation problem once and for all. 2.4.1節で議論したように、宇宙の終りは10の30乗年になる前に起ると予測されて いる。 しかしながら、現在のY2K問題から学んだ教訓が一つあるとすれば、 それは規定や慣行は想定された環境が生きている間はそのままにされるという ことである。 それゆえに我々は全ての時刻表現を完全に解決することが肝要で あると感じている。 3.4.1 Naive Approach for Y10**30 Problem Y10**30問題への単純なアプローチ The naive solution is to prepend a single '^' (caret) - caret sorts after all letters in the ASCII order) before all years from 10 ** 30 to 10 ** 56. Thus the year "Z999999999999999999999999999999" is followed by the year "^A1000000000000000000000000000000". Similarly, all years from 10 ** 56 to 10 ** 82 get one more caret. So, the year "^Z99999999999999999999999999999999999999999999999999999999" is followed by the year "^^A100000000000000000000000000000000000000000000000000000000". This scheme can be extended indefinitely by prepending one addition caret for each additional factor of 10 ** 26 in the range of the year. 単純な解決方法は10の30乗から10の56乗までの全ての年の前に'^'(キャラット - キャラットは全てのASCII文字の後にソートされる)を先付けすることである。 そのような年は”Z999999999999999999999999999999"の後に "^A1000000000000000000000000000000"年が続く。 同様に、10の56乗から 10の82乗までの全ての年はもう一つキャラットをつける。 そうすると、 "^Z99999999999999999999999999999999999999999999999999999999”年の後に "^^A10000000000000000000000000000000000000000000000000000000”年が続く。 このスキームは10の26乗毎に一つ余分にキャラットを先付けすることで無限に 拡張することが出来る。 In this approach, the number of digits in a date that are used to represent the year is simply: このアプローチでは、時刻表現内の年を表すのに使用される数値の数は単に、 以下のようになる。 26 * + ASCII() - ASCII('A') + 5 Note: this algorithm is provided for informational purposes only and to show the path leading to the true solution. Y10K dates MUST NOT use this format. They MUST use the format in the next section. 注意:このアルゴリズムは説明目的と真の解決方法へつながる道を示すため だけに提供したものである。 Y10Kに対応した時刻表現はこのフォーマットを 使用してはならない。 それらは次の節のフォーマットを使用しなければならない。 3.4.2 Space Efficient Approach for Y10**30 Problem Y10**30問題の空間効率のよいアプローチ The solution in 3.4.1 is not a space efficient format for giving the number of digits in the year. The length of the prefix grows linearly in the length of the year (which, itself, grows logarithmically over time). Therefore, Y10K format dates use an improved, more compact encoding of the number of digits in the year. 3.4.1節での解決方法は年の数値の個数から空間的に効率のよいフォーマットでは なかった。 プリフィクスの数は年の長さ(それ自体、時間に対して対数的に 成長する)に対して線形的に成長する。 それゆえに、Y10Kに対応した フォーマットは年を示す数値の個数に関して改善された、よりコンパクトな エンコーディングを使用する。 3.4.2.1 Years 10 ** 30 to 10 ** 56 10の30乗から10の56乗まで As in 3.4.1, a single '^' and letter precede the year. 3.4.1節でのように、一つのキャラットと文字を年の先に付ける。 3.4.2.2 Years 10 ** 56 to 10 ** 732 10の56乗から10の732乗まで The year is preceded by two carets ("^^") and two letters. The letters create a two digit, base 26 number which is the number of digits in the year minus 57. So, the year "^Z99999999999999999999999999999999999999999999999999999999" is followed by the year "^^AA100000000000000000000000000000000000000000000000000000000". The last representable year with two carets is the year (10 ** 732) - 1 and is "^^ZZ999..999" (i.e. two carets and two Z's, followed by 732 consecutive 9's). 二つのキャラット(”^^”)と二つの文字が年の前に先付けされる。 その 文字は年の数から57を減算し、基数を26とする数を作る。 "^Z9999999999999999999999999999999999999999999999999999999”年の後に "^^AA100000000000000000000000000000000000000000000000000000000"年が続く。 二つのキャラットで表現可能な最後の年は10の732乗-1年であり、"^^ZZ999..999" (つまり、二つのキャラットと二つのZ、そして732の連続した9が続く)。 The formula for the number of digits in the year is, based on the two digit prefix is: その時の桁の数の公式は、二つの桁のプリフィクスに基づき、 26 * (ASCII() - ASCII('A')) + ASCII() - ASCII('A') + 57 となる。 3.4.2.3 Years 10 ** 732 to 10 ** 18308 10の732乗から10の18308乗年 The next block of years has the number of digits given by three carets ("^^^") followed by three letters forming a three-digit, base 26 number. The number of digits in the year is given by the formula: 年の次のブロックは三つのキャラット(”^^^”)に続き26を基数とする3桁を 形成する文字が続く。 その年の桁の数は以下の公式で与えられる。 676 * (ASCII() - ASCII('A')) + 26 * (ASCII() - ASCII('A')) + ASCII() - ASCII('A') + 733 3.4.2.4 General Format for Y10K Dates Y10K対応の時刻の汎用フォーマット In general, if there is at least one letter in a Y10K year, the number of the digits in the year portion of the date is given by the formula: 一般に、Y10K年内で少なくとも一つの文字が存在する場合、その年の部分の桁 の数字は以下の公式で与えられる。 base26(fib(n) letters) + y10k(n) Where "n" is the number of leading carets and the fig, base26 and y10k functions are defined with the following recurrence relations: ”n"はキャラットの数でありfig(訳注:これはおそらくfib)、base26、y10k の関数は以下の再帰関係で定義される。 fib(n) is the standard Fibonacci sequence with: fib(n)は標準的なフィボナッチ数列である。 fib(0) = 1 fib(1) = 1 fib(n+2) = fib(n) + fib(n+1) base26(m letters) is the base 26 number represented by m letters A-Z: base26(m)はmがAからZの文字により表現される26進数である。 base26(letter) = ASCII() - ASCII('A') base26(string letter) = 26 * base26(string) + base26(letter) y10k(n) is the necessary fudge factor to align the sequences y10k(n)は数列を整列されるためのその場しのぎの要素である。 properly: 適切には、 y10k(0) = 5 y10k(n+1) = 26 ** fib(n) + y10k(n) である。 If the year does not have at least one letter in the year, then the number of digits in the year is: 4 年がその年(の表現)で一つも文字を持たない場合、その年の桁の数は、4 である。 This year format is space-efficient. The length of the prefix giving number of digits in the year only grows logarithmically with the number of digits in the year. And, the number of carets preceding the prefix only grows logarithmically with the number of digits in the prefix. この年のフォーマットは空間効率がよい。 年の桁数を与えるプリフィクスは 年の桁数が対数的にのみ成長する。 そして、プリフィクスの前のキャラット の数はプリフィクスの桁数に対して対数的にのみ成長する。 3.5 B.C.E. (Before Common Era) Years 紀元前の年 Now that have a format for all of the years in the future, we'll take on the "negative" years. A negative year is represented in "Y10K- complement" form. A Y10K-complement year is computed as follows: これまでで、未来の全ての年のためのフォーマットを得た。 そこで我々は 負の年を考える。 負の年はY10Kの補数により表現される。 Y10Kの補数の 年は以下のように計算される。 1) Calculate the non-negative Y10K year string as in 3.4.2.4. 2) Replace all letters by their base 26 complement. I.E. A -> Z, B -> Y, ... Z -> A. 3) Replace all digits in the year portion of the date by their base 10 complement. I.E. 0 -> 9, 1 -> 8, ... 9 -> 0. 4) Replace carets by exclamation points ('!'). 5) Four-digit years are pre-pended with a slash ('/') 6) Years that don't now begin with an exclamation point or slash are pre-pended with a star ('*'). (This rule covers the negative 5- 31 digit years). 1)3.4.2.4節でのように非負のY10K年の文字列を計算する。 2)全ての文字を26の基数に対する補数に置き換える。 つまり、AはZに、 BはY、...ZはAになる。 3)日付の年の部分の全ての桁をそれらの10の補数で置き換える。 つまり、 0を9、1を8、...9を0とする。 4)キャラットをエクスクラメーション('!')で置き換える。 5)スラッシュ('/')を4桁の年に先付けする。 6)エクスクラメーションやスラッシュで始まらない年はスター('*')を先付け する。 (この規則は負の5から31桁の年を包括する) For example, the year 1 BCE is represented by "/9998". The conversion is accomplished by applying rules: 例えば、紀元前1年は"/9998"で表現される。 その変換は(変換)規則を適用 することで得られる。 1) Calculate the non-negative Y10K year ("1" -> "0001") 2) Complement the digits ("0001" -> "9998") 3) Four-digit numbers get a leading slash. 1)非負のY10K対応の年を計算する("1"は"0001"になる)。 2)各桁の補数をとる("0001"は"9998"になる)。 3)4桁の数字の先にスラッシュをつける。 The earliest four-digit BCE year (9999 BCE) becomes "/0000" and the year before that (10000 BCE) becomes "*Z89999". The earliest 5-digit BCE year (99999 BCE) is "*Z00000". And the year before that (100000 BCE) is "*Y899999". And so on. 最も過去の4桁の紀元前年(紀元前9999年)は"/0000"になりその前の年(紀元前 10000年)は"/Z89999"になる。 最も過去の5桁の紀元前年(紀元前99999年) は"*Z00000"である。 そしてその前の年(紀元前100000年)は"*Y899999"である。 それ以前も同様である。 These rules give the desired sort order for BCE dates. For example, the following dates get translated and sorted as: Jun 6, 200 BCE /97990606 199 BCE /9800 Jan 1, 199 BCE /98000101 これらの規則は紀元前年に対する望ましいソート順を提供する。 例えば、 以下のように日付が変換されソートされる。 紀元前200年6月6日 /97990606 紀元前199年 /9800 紀元前199年1月1日 /98000101 3.6 Restrictions on Y10K Dates Y10K対応の日付の制約 There are no restrictions on legal values for Y10K dates. Y10K compliant programs MUST accept any syntactically legal Y10K date as a valid date. A '0' can be appended to the end of any Y10K date, yielding an equivalent date that sorts immediately after the original date and represents the instant after the original date. Y10K対応の時刻表現の正当な値には制約はない。 Y10Kに対応したプログラムは 文法的に正当であるY10K対応の時刻表現を有効な時刻表現として受け入れなければ ならない。 任意のY10K対応の時刻の後に'0'を付加し、元の時刻のすぐ後に ソートされ元の時刻のすぐ後の瞬間を表現する等価な時刻を生成することが 出来る。 The following are all valid representations (in sorted order) of the first instant of A10000: 以下は(ソートされた)A100000の最初の瞬間の有効な全ての表現である。 A1 A10000 A1000001 A100000101000000 A1000001010000000000000000000000 Similarly, the following are all valid Y10K dates (in sorted order) for the time after the last instant of the A99999 and before the first instant of B100000: 同様に、以下はA99999の最後の瞬間後とB100000の最初の瞬間前の全ての有効な Y10Kに対応した時刻である。 A999991231250000 A999991232 A999992 A9999999999 A99999999990000000000000 4 ABNF ABNF記法 The following ABNF [Crocker] gives the formal syntax for Y10K years. 以下のABMNF記法[Crocker]はY10K対応の時刻の正式な文法を提供する。 The initial characters definitions are given in their lexical collation (ASCII) order. 最初の文字定義はそれらの(ASCIIコードでの)辞書順序を提供する。 exclamation = '!' star = '*' slash = '/' digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 letter = A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z caret = '^' year = [*(caret | exclamation) | star | slash ] [ *letter ] *digit month = 2digit day = 2digit hour = 2digit minute = 2digit second = 2digit fraction = *digit date = year [ month [ day [ hour [ minute [ second [ fraction ]]]]]] 5 Open Issues There are a number date comparison problems that are beyond the scope of this specification. この記述の範囲を越えた多数の時刻表現の比較の問題が存在する。 1) Dates from different calendar systems can not be directly compared. For instance, dates from the Aztec, Bhuddist, Jewish, Muslim, and Hittite calendars must be converted to a common calendar before comparisons are possible. 2) Future re-numberings of years are not covered. If, and when, a new "Year 0" occurs and comes into general use, old dates will have to be adjusted. 3) Continued existence of Earth-centric time periods (year, day, etc.) are problematical past the up-coming destruction of the solar system (5-10 billion years or so). The use of atomic-time helps some since leap seconds are no longer an issue. 4) Future standards and methods of synchronization for inter- planetary and inter-galactic time have not been agreed to. 5) Survivability of dates past the end of the universe is uncertain. 1) 異なる暦法の時刻表現は直接比較出来ない。 例えば、アステカ、仏教、 ユダヤ、ムスリム、ヒッタイトの暦法は比較が可能になる前に共通の暦法に 変換しなければならない。 2) 将来の年の再番号付けを包括していない。 新たな”0”年が生じてそれが 一般的に使用される場合、古い時刻表現は調整される必要がある。 3) 地球中心の周期(年、日など)の存在が続くことは、太陽系の終焉(50から 100億年後)以降に問題となる。 原子時の使用はうるう秒が問題とならなく なることから助けとなる。 4) 未来の惑星間や銀河間の時刻表現の標準化のその方法が同意されていない。 5) 宇宙の終りに過去の時刻表現が生き残るかが明確でない。 6 Affected Standards 影響を受ける標準 A number of standards currently and RFCs use 4-digit years and are affected by this proposal: 多数の現在の標準とRFCが4桁の時刻表現を使用していてこの提案により影響を 受ける。 rfc2459: Internet X.509 Public Key Infrastructure Certificate and CRL Profile rfc2326: Real Time Streaming Protocol (RTSP) rfc2311: ODETTE File Transfer Protocol rfc2280: Routing Policy Specification Language (RPSL) rfc2259: Simple Nomenclator Query Protocol (SNQP) rfc2244: ACAP -- Application Configuration Access Protocol rfc2167: Referral Whois (RWhois) Protocol V1.5 rfc2065: Domain Name System Security Extensions rfc2060: Internet Message Access Protocol - Version 4rev1 rfc1922: Chinese Character Encoding for Internet Messages rfc1912: Common DNS Operational and Configuration Errors rfc1903: Textual Conventions for Version 2 of the Simple Network Management Protocol (SNMPv2) rfc1521: MIME (Multipurpose Internet Mail Extensions) Part One: rfc1123: Requirements for Internet hosts - application and support The following standards internally represent years as 16-bit numbers (0..65536) and are affected by this proposal: 以下の標準は内部で16ビット値(0から65536)で時刻を表現していてこの提案に より影響を受ける。 rfc2021: Remote Network Monitoring Management Information Base Version 2 using SMIv2 rfc1514: Host Resources MIB The following ISO standard is affected: 以下のISO標準が影響を受ける。 ISO8601: International Date Format 8 Security Considerations 安全性への考慮 Y10K dates will improve the security of all programs where they are used. Many errors in programs have been tracked to overflow while parsing illegal input. Programs allocating fixed size storage for dates will exhibit errors when presented with larger dates. These errors can be exploited by wily hackers to compromise the security of systems running these programs. Since Y10K dates are arbitrary length strings, there is no way to make them overflow. Y10Kに対応した時刻表現はそれを使用する全てのプログラムの安全性を向上する。 プログラムの多くのエラーは不正な入力を処理する際のオーバーフローで捕捉 される。 時刻表現に固定サイズのストレージを割り当てるプログラムは大きな 時刻表現が提示された時にエラーを示す。 これらのエラーはこれらの プログラムが動作しているシステムの安全性を脅かす狡猾なハッカーによって 喰いものにされるかもしれない。 Y10Kに対応した時刻表現は任意の長さの 文字列であり、オーバーフローされる手段は存在しない。 In addition, positive Y10K dates are easy to compare and less error- prone for humans. It is easier to compare the three projected end of the universe dates - "H100000000000", "I1000000000000" and "K100000000000000" - by looking at the leading letter than by counting the 0's. This will reduce inadvertent errors by people. This advantage will become more noticeable when large dates are more common. 加えて、Y10Kに対応した正の時刻表現は比較が容易で人間によるエラーが少ない。 宇宙の終焉を反映した三つの時刻表現 - "H100000000000","I1000000000000", "K100000000000000" - は連続した0を数えずとも先頭の文字を見ることで比較が 容易である。 これは人間の不注意によるエラーを減少する。 Unfortunately, negative Y10K dates are a bit more difficult to decipher. However, by comparing the current age of the universe to its projected end, it is obvious that there will be many more positive dates than negative dates. And, while the number of negative dates for human history is currently greater than the number of positive dates, the number of negative dates is fixed and the number of positive dates is unbounded. 残念ながら、Y10Kに対応した負の時刻表現を解読するのは少々難しい。 しかしながら、宇宙の現在の年齢から宇宙の終焉までの比較では負の時刻表現 よりも正の時刻表現の方が多いことは明らかである。 そして、人類の歴史に おける負の時刻表現は現在は正の時刻表現よりも多いが、負の時刻表現の数が 固定されているのに対して正の時刻表現は上限がない。 9 Conclusion まとめ It is not too early to aggressively pursue solutions for the Y10K problem. This specification presents a simple, elegant, and efficient solution to this problem. Y10Kを積極的に追求する解決方法は容易ではない。 この記述はこの問題に 対する単純で、上品で、そして効率的な解決方法を提示する。 10 References [Crocker] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 2234, November 1997. [Drake] Review for the Drake Equation http://www.umsl.edu/~bwilking/assign/drake.html [Microsoft] SNMP SysUpTime Counter Resets After 49.7 Days http://support.microsoft.com/support/kb/articles/Q169/ 8/47.asp [Mike] Y1K http://lonestar.texas.net/~mdlvas/y1k.htm [Nigel] Nigel's (en)lighening tour of Thermodynamics for Economists ;-) http://www.santafe.edu/~nigel/thermo- primer.html [NRAO] Astronomical Times http://sadira.gb.nrao.edu/~rfisher/Ephemerides/times.html [RFC] Here are all the online RFCs. Note: this is a LONG menu. http://info.internet.isi.edu/1s/in-notes/rfc/files [UNIX] Year 2000 Issues http://www.rdrop.com/users/caf/y2k.html [Wilborne] PktCDateLig http://www3.gamewood.net/mew3/pilot/pocketc/pktcdate/ index.html [YUCK] Y10K Unlimited Consulting Knowledgebase http://www.loyd.net/y10k/index.html [Zebu] The Search for H0 http://zebu.uoregon.edu/1997/ph410/l6.html 11 Authors' Addresses Steve Glassman Compaq Systems Research Center 130 Lytton Avenue Palo Alto, CA 94301 USA Phone: +1 650-853-2166 EMail: steveg@pa.dec.com Mark Manasse Compaq Systems Research Center 130 Lytton Avenue Palo Alto, CA 94301 USA Phone: +1 650-853-2221 EMail: msm@pa.dec.com Jeff Mogul Compaq Western Resarch Lab 250 University Avenue Palo Alto, CA 94301 USA Phone: +1 650-617-3300 EMail: mogul@pa.dec.com 12. Full Copyright Statement 著作権表記 Copyright (C) The Internet Society (1999). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.