2012-02-01 5 views
3

私はタイムアプリケーションを開発中で、クラスを持つ可能性のある時間を表すClassOptionと呼ばれるクラス があります。 フィールド(/プロパティ):Day,StartTime,EndTime、およびWeeks時間を表現するための最高のクラス

は今Dayそれはタイプが

WeeksDayOfWeekは、それが自分の大学で学期週表記するか、カレンダーの週に表現されているため、カスタムクラスを作るために私を必要としているでは簡単だが、基本的に来ます最終的には整数の集合になる。

しかし、StartTimeEndTimeにはどのような呼び出しを使用しますか。 これは時間ですが、日付情報はありません。 DateTimeは合理的な選択肢のようですが、どの日付でも可能です。 (多くの日付) ビジネスロジックでは、どちらも時間がかかりますが、それは本当に問題ではありません

+3

日付処理のためのタイプに建てられた唯一のIMOの単純な仕事のためにフィットしています。要件がより複雑なので、「野田時間」などの第三者図書館を調べることができます。私は確かにジョンがすぐにノーダを促進する回答を投稿すると確信しています:P編集:「すぐに」私は「すでにやった」という意味です – CodesInChaos

答えて

5

まだv1ではない第三者図書館を使用していただければ幸いですプラグインはNoda Timeです。 LocalTime構造体を使用します。

基本クラスライブラリに問題がある場合は、TimeSpanを使用するか、DateTimeを使用できます。もちろん、私はLocalTimeが:)

ああしかし、よりエレガントな解決策になると思いますし、あなたは野田時間を使用しない場合、私は思います

+1

誰かが投稿したことを見ました。私は思った: "ねえ、ジョン・スケートはタイム・ライブラリーで働いていませんでした。"そして見よ、ここにある。 –

+0

'Duration'構造体はちょっと変わったIMOです。それは 'TimeSpan'と完全に冗長であるようです。私はあなたの可変長フィールド引数を取得しません。秒は常に秒です。この議論は、月や年などのより長い期間型にのみ適用されます。 (日は少し灰色の領域です)。なんらかの理由で、それは 'FromXYZ'関数の整数値だけをサポートします。 – CodesInChaos

+0

@CodeInChaos:はい、DurationはTimeSpanと事実上同じですが、一貫性のあるAPI(うまくいけば)をサポートしています。そして、はい、*いくつかの*期間フィールドは固定長ですが、他のフィールドは固定長ではありません。 FromXYZ関数の積分値をサポートするだけで私にとっては妥当だと思われます - 私は小数点以下の値を整数として知っているときに小数値を指定したかったのです。 –

1

...あなたが任意の機能要求やコメントがあればお聞かせください日付を無視している間だけ時間値とともに使用できるDateTimeか、真夜中から経過した時間、つまり時刻を表すTimeSpanのいずれかを使用します。実際、これはDateTimeオブジェクトで使用されているとおりです。TimeOfDayを要求すると、TimeSpanが取得されます。

どちらも、時間を比較、加算、減算する便利な算術演算を提供する点で優れています。 Date部分は無視してください。

+0

時間を加算したり減算したりすると、ローカル時間に作業する場合に、「DateTime」に問題が発生する可能性があります。 DSTは悪です。 – CodesInChaos

2

あなたは、期間を表すためにTime Period Library for .NETDateDiff関数クラスを使用することができます。

// ---------------------------------------------------------------------- 
public void DateDiffSample() 
{ 
    DateTime date1 = new DateTime(2009, 11, 8, 7, 13, 59); 
    Console.WriteLine("Date1: {0}", date1); 
    // > Date1: 08.11.2009 07:13:59 
    DateTime date2 = new DateTime(2011, 3, 20, 19, 55, 28); 
    Console.WriteLine("Date2: {0}", date2); 
    // > Date2: 20.03.2011 19:55:28 

    DateDiff dateDiff = new DateDiff(date1, date2); 

    // description 
    Console.WriteLine("DateDiff.GetDescription(1): {0}", dateDiff.GetDescription(1)); 
    // > DateDiff.GetDescription(1): 1 Year 
    Console.WriteLine("DateDiff.GetDescription(2): {0}", dateDiff.GetDescription(2)); 
    // > DateDiff.GetDescription(2): 1 Year 4 Months 
    Console.WriteLine("DateDiff.GetDescription(3): {0}", dateDiff.GetDescription(3)); 
    // > DateDiff.GetDescription(3): 1 Year 4 Months 12 Days 
    Console.WriteLine("DateDiff.GetDescription(4): {0}", dateDiff.GetDescription(4)); 
    // > DateDiff.GetDescription(4): 1 Year 4 Months 12 Days 12 Hours 
    Console.WriteLine("DateDiff.GetDescription(5): {0}", dateDiff.GetDescription(5)); 
    // > DateDiff.GetDescription(5): 1 Year 4 Months 12 Days 12 Hours 41 Mins 
    Console.WriteLine("DateDiff.GetDescription(6): {0}", dateDiff.GetDescription(6)); 
    // > DateDiff.GetDescription(6): 1 Year 4 Months 12 Days 12 Hours 41 Mins 29 Secs 
} // DateDiffSample 
+0

非常に良い図書館、良い仕事。 –

+0

@Alex:ありがとう! – Jani

関連する問題