日後の週の最後の日の日付を出力するとします。使う気にもなりません。使用するのでは、あまりにも面倒です。威力を初めて認識したのは、数年前、まさにこのような問題に取り組んでいるときでした。ようなコードで日付を計算することができます。出力は以下のようになります。使用したいというのであれば、それはいわば、ハサミを使って芝を刈ったり、使い古した歯ブラシを使って車を洗ったりすることと同じです。この欠点を補っていることがわかるまでに、そう時間はかかりません。設計者たちは使いやすさに加え、ある決定も行いました。インターオペラビリティーです。インスタンスを生成することができます。使って困難な作業をこなせるというわけです。ような変更を加えればよいだけです。オブジェクトで処理することができます。使用する以下の概念は、あらゆる日付/時刻ライブラリーに適用できるはずです。なかでの上記の概念を順に説明していきます。クラスは不変クラスです。つの利点は、スレッドセーフであることです)。クラスの新規インスタンスを返し、元のインスタンスを変更することはしません。クラスを操作するときには、操作対象のインスタンスは変更できないため、メソッドの戻り値を取り込む必要があります。さまざまな操作メソッドもこれと同じような動作をするので、おそらく皆さんにはお馴染みのパターンのはずです。ある特定の時点を表し、エポックからのミリ秒数で表現されます。クラスと互換性を持つ理由です。一般的に定義すると、インスタントとは時系列における固有の一点であり、一度しか発生しません。したがって、この日付構成体が意味のある形で起こり得るのは一度きりです。単なる時刻の断片のことです。インスタントがエポックを基準にした相対的なある特定の一時点を表すのに対し、パーシャル・タイム・スニペットは「スライドする」と複数のインスタントに適用できるようなある共通の意味を持つ時点を指しています。番目の日であれば、どの日にでも当てはまります。回は該当する時点があります。このように、パーシャル・タイム・スニペットは特定の一時点を表すわけではありませんが、役に立つことはあります。私としては、パーシャル・タイム・スニペットはある周期で繰り返されるなかの一時点だと考えています。考えられる場合、それはパーシャルということになります。いう名前の抽象クラスに取り込まれます)。あり、日付計算を行うためのフレームワークのことです。以下のものがあります。そのそれぞれが、特定の暦の体系の計算エンジンとして機能します。タイムゾーンタイムゾーンとは、時刻の計算に使用される、英国グリニッジを基準とした相対的な地理的位置です。イベントが発生した正確な時刻を知るには、イベントが発生した地点を知ることも重要になります。基準とした相対的な時刻で行う必要があります。同じタイムゾーン内で時刻を計算する場合でも、別のタイムゾーンの関係者にとって興味深いイベントであれば、タイムゾーンが計算に関係してきます。ライブラリーがこの位置の概念をカプセル化するために使用するクラスです。行っている処理にどのように影響するかについては、理解しておかなければなりません。大体の場合は、コードを実行しているマシンのシステム・クロックから取得された時刻がデフォルトとして使用されます。クラスをいくつか紹介し、これらのクラスのインスタンスを作成する方法を説明します。クラス私は可変ユーティリティー・クラスの絶大なるファンというわけではありません。クラスを使用しなければならないと判断した場合、このセクションの情報が皆さんそれぞれのプロジェクトに役立つはずです。クラスについての説明は省きます。このセクションで取り上げる実装にはすべて、カプセル化された日付/時刻を初期化するために使用できるコンストラクターがいくつかあります。これらのコンストラクターは、以下のカテゴリーに分類することができます。システム時刻を使用するコンストラクター。その特定の実装がサポートする最も粒度の細かい精度に指定するコンストラクター。ミリ秒単位で指定するコンストラクター。使用するコンストラクター。クラスの例で説明します。クラスの対応するコンストラクターを使用する場合にもぴったり当てはまります。引数に取るオーバーロードされたメソッドが含まれています。(「ダウンロード」を参照)。オーバーロードされたメソッドの使い方は非常に単純なので、この記事で詳細を説明することはしませんが、皆さんには是非、サンプル・アプリケーションをいろいろと試してみることをお勧めします。交換できるようなコードを作成することが、いかに簡単であるかを実感できるはずです。クラスによって実体化します。いう名前にしたほうが設計者たちの意図が伝わっていたのではないかと思います。変更不可能な一時点を表すということです)。頻繁に使用することになるクラスです。このクラスは特定の時点をミリ秒の精度でカプセル化します。指定しなければ、コードが実行されているマシンのタイムゾーンにデフォルト設定されます。オブジェクトを構成するには、いくつかの方法があります。以下のコンストラクターは、システム時刻を使用します。DateTime();通常、私はシステム・クロックを使ってアプリケーションの時刻を初期化することは避け、アプリケーションのコードが使用するシステム時刻の設定を外部化するようにしています。サンプル・アプリケーションでは以下のようにしています。SystemFactory.getClock().getDateTime();こうしておくと、さまざまな日付/時刻を使用するコードのテストが遥かに単純になります。この場合、異なる日付のシナリオを実行するためにコードを変更する必要はありません。(システム上の時刻を変更することもできますが、あまりにも厄介です)。オブジェクトを構成します。オブジェクトをどのように作成するかを緻密に制御することができます。クラスが保持できるすべてのフィールドをこのコンストラクターで指定します。このコントラクターはいわば、特定のクラスがどのような粒度で動作するのかを知るためのクイック・ガイドとして利用することができます。以下のコンストラクターは、エポックからのミリ秒数でインスタントを指定します。オブジェクトのミリ秒の値から作成します。オブジェクトをコンストラクターに直接渡しているという点が異なります。作成する際に他の多数のオブジェクトをコンストラクターのパラメーターとしてサポートします。使用する場合には、正確な書式設定が必要となることに注意してください。(「参考文献」を参照)。時というインスタントをカプセル化します。時であるという点が異なります。目を通すと見えてくるパターンです)。以降のセクションではスペースを節約するため、それぞれのクラスについては説明しません。ReadablePartialアプリケーションで処理するすべての日付が、完全なインスタントであるわけではありません。そこでインスタントの代わりの手段として使用できるのが、パーシャル・インスタントです。週間の中のある曜日にしか関心がないという場合があります。インターフェースに取り込みました。重要でない日付を保管する上で重宝します。16日という値だとします。わからなくても、ビジネス価値はまったく損なわれません。