コードの日付とタイムゾーンを処理する



ソフトウェア開発者はしばしば日付を扱わなければならない.正直、私は彼らが彼らの仕事の好きな部分であると確信しません😉 実際には、日付操作は、タイムゾーンの悪い管理などの日付計算の様々な問題につながることができます.この記事では、ソースコード内の一般的な問題を回避し、日付操作を処理するためのヒントを提供します.我々は、JSの日付と例をカバーしますが、ここで紹介されている原則は、任意の言語で適用することができます.

ヒント:日付操作のカプセル化
まず、すべての日付操作をクラス、サービス、または別のモジュールにカプセル化する必要があります.私を信頼:これは確かにあなたが最初の廃棄物のように思われる場合でも、多くの時間を保存します.このようなモジュールでは、日付操作に関するすべての機能が必要です.それ以上ではない.タイムゾーンでの操作を実行する必要がありますか?モジュールはあなたのためにそれをします.あなたは日付を計算する必要がありますか?モジュールはあなたのためにそれをします.あなたは、リスト内の日付の計算は、最も最近のですか?再び、モジュールはあなたのためにそれをします.あなたはアイデアを得る.このモジュールから機能を使用することをお勧めします.開発者は、他のどこでも日付操作を実行するソースコードを書く必要はありません.
このアプローチはobject repositoriesのデータベース実装の隠蔽に似ており、より柔軟性をもたらします.実際に、どのように情報が実際に格納されているかを知る必要がなくても、リポジトリにアイテムを与えるのと同じように、ここでは、使用されるライブラリの実装仕様を知る必要なしに日付を要求することができます.
いいでしょうJSコードのためのモーメントやJavaのためのJodaなどの目的に専用のライブラリに依存します.データベースツール(MySQL、Mango、Redisなど)を使用するのと同じ方法で、これは間違いなく良い考えです.ただし、これらのAPIへの呼び出しは、日付モジュール内でのみ表示される必要があります.これはプログラムのテストを改善し、モジュールのテストスイートを設定することに集中できます.

日付とイラスト
ここでは、時間とともに時刻を管理するタイムヘルパークラスの展開を行います.
public isSameDate(other: TimeHelper): boolean {

    let thisDate: moment.Moment = this.toMoment;
    if(this._isNextDay){ thisDate.subtract(1, "day"); }

    let otherDate: moment.Moment = other.toMoment;
    if(other._isNextDay){ otherDate.subtract(1, "day"); }

    return thisDate.isSame(otherDate, "date");
}

常にチェック日付とtz
タイムゾーンをアカウントに取り入れずにジェネリック日付管理ライブラリを使用して書かれたカレンダーアプリケーションを開発すると仮定します.あなたが世界中のアプリケーションを輸出することに決めるならば(UTC - 10(タヒティ島)TZの上でUTC + 11(ニューカレドニア島)まで)フランスでさえ、あなたが日付カプセル化をしないならば、それはすべての日付を見つけて、タイムゾーン情報で彼らを豊かにする必要があります.
また、いつでも、ユーザーの入力日と時間を尋ねる場合は、常にタイムゾーンを求める必要がある場合は疑問に思う必要があります.あなたが7 pmのためにロンドンで映画のためにパリと本に拠点を置くならば、あなたはロンドンTZの上で午後7時を考慮しなければなりません.また、通常の悪い習慣は、任意のTZ情報内のDBに日付形式を格納することです.あなたはあなたの7 PMは地球上にある場所を知る必要があります!


コントロールあなたの日付形式
第二に、別のベストプラクティスも日付の表示形式を制限することです.すべての日付とスケジュールは、アプリケーション全体で同じに見えるはずです.これを容易にするために、アプリケーションで使用される異なる形式のリストを含む列挙体またはグローバル変数を作成できます.このように、我々がフォーマットを使いたいならば、我々は常に手元にそれらを持っています、そして、我々が我々が使いたかったものを見つけないならば、それは疑いなくそれを使うために悪い考えです.または少なくとも、これはあなたの顧客によって検証されるべきです.
日付を使用した列挙の例を示します.
export enum TimeFormats {
    HH_mm =  "HH:mm",
    HH_h_mm = "HH[h]mm",
    HH_mm_ss = "HH:mm:ss",
}

export enum DateFormats {
    DD_MM_YYYY = "DD/MM/YYYY",
    YYYY_MM_DD = "YYYY-MM-DD",
    dddd_LL = "dddd LL",
    DD_MM = "DD/MM",
    dddd_DD_MMMM = "dddd DD MMMM",
    dddd_DD_MMMM_YYYY = "dddd DD MMMM YYYY",
    ddd_DD_MMM_YYYY = "ddd DD MMM YYYY"
}

事態を予想する
第三に、日付管理で取得する最善の方法は、ソフトウェアを準備することです.確かに、日付のユースケースを知るようになるとすぐに、プロジェクトで適切に実装できます.このモジュール、このサービス、プロトタイプ/MVPからのこのクラスを作成することは、おもしろいです.あなたが知っていないので、一部の人々は、MVPが生産に入るのを見ました
最後の推薦は、それがチームとどんな新人の誰のためにでも明らかにするために、Promyzeに日付管理に関連したすべてのベストプラクティスを集めることです.