2010-11-29 15 views
5

ユーザーが不完全な日付を入力できるようにするアプリケーションで作業します。不完全な日付の戦略

いくつかのケースでは唯一の年があるでしょう - 1854年と言う、または1983年3月たとえば、年と月があるかもしれない、または完全な日付があるかもしれません - 6月11日、2001年

私たちは」 1つの '日付'属性/列が好きで、日付をソートすることができます。

提案がありますか?

+0

ユーザーが「1854」を入力し、別のユーザーが「2PM 1854」と入力し、降順でソートすると、どちらが先になるのですか? – RPM1984

+0

サポートする必要がある最低年の値は何ですか? – jgauffin

答えて

8

日付を整数(yyyymmdd)として格納します。

あなたは、私はあなたがその日の情報のいずれかの時間を保存する必要がないと仮定しています。もちろん、

Year only: 1954 => 19540000 
Year & Month: April 2004 => 20040400 
January 1st, 2011 => 20110101 

入力されていない任意の月や日のコンポーネントをゼロにすることができます。

あなたは、その後など、

編集粒度のレベルは、関連のSystem.DateTimeに設定されているかを示す有用な性質で、このロジックをカプセル化するための構造体を作成することができます。その後、同様にうまく

0

「IsDateComplete」という単一の列とフィールドでこれを行うことができます。

ます場合しかは、日付フィールドを持っている、あなたは日付が、たとえば、< 1900であれば、それは「不完全」と見なされますよう、日付形式自体に「不備」をエンコードする必要があります。

個人的には、私は横にあるフィールドに行き、そのようにマークします。簡単に従うことができ、意思決定が容易で、任意の日付を許可します。

おそらく、DateTime.MinValueから日付を作成して「知っている」ものを設定できることは言うまでもありません。

私のアプローチでは、わからないことを「知る」ことはできません。 (つまり、あなたは彼らが月を設定したことを知らない)。おそらく、日付形式指定子を使ってそれを隠し、それを一緒に保存することもできますが、煩雑になる可能性があります。

とにかく、あなたのためのいくつかの考え。

0

1つのオプションは、デフォルトの月として1月、デフォルトの日として1、デフォルトの年として1900などを使用することです。不完全な日付はそれらのデフォルトでパディングされ、不完全な日付は同じ年の完全なものよりも前にソートされます。

もう1つ、もう少し複雑なオプションは、デフォルトの日と年、-1、 'NoMonth'、またはデフォルトの月などのようなものを使用することです。上記のように不完全な日付をパッドします。これは、あなたがどのようにそれを行うかによって、少し難しいかもしれませんが、日付のどの部分が有効であるかを伝える方法を提供します。

0

私はあなたがむしろ1つの列を持っているだろうと知っていますが、1つの列の代わりに、いつも1日、1ヶ月および1年の間に別の列を持つことができます。それに対してクエリを実行することはそれほど難しくありませんし、すべてのコンポーネントが常にnullになるようにします。

これらの状態をdatetimeでエンコードすると、クエリが難しくなります。

0

この問題を最後に解決したときに、実際に設定された日付部分を追跡し、DateTimeとの変換を提供するカスタムの日付型を作成することでした。データベースに格納するために、私は1つの日付フィールドと1つのブール値/ビットを使用して、ユーザーによって実際に設定された日付コンポーネントを追跡しました。

1

を動作するはず並べ替えを私は単一の日付フィールドを使用する良い方法を考えることはできません。

1月をデフォルトの月として使用し、デフォルトの1日を他の人が示唆しているように問題が生じる場合、実際に1月を選択するとどうなりますか?選択された1月か既定の1月であれば、どのように追跡しますか?

あなたは、日付とともにマスクを保存しなければならないと思います。 日付の一部にはビットが必要です(データの6ビットのみになります)。

M | D | Y | H |ミン| S

月のみ1 | 0 | 0 | 0 | 0 | 0 = 32

年のみ0 | 0 | 1 | 0 | 0 | 0 = 8

月+年1 | 0 | 1 | 0 | 0 | 0 = 40

AllButMinSec 1 | 1 | 1 | 1 | 0 | 0 = 60

あなたがにこれを入れることができますコードでの使用を容易にするフラグ列挙型。