16

私は現在、ビジネスの開閉時間を処理するかなり単純なアプリを作成しており、情報を適切に保存する方法を見つけようとして深刻な問題に直面しています。

私たちの重要な機能のほとんどは、時間を完全に完璧にすることに大きく依存しているため、最初から可能な限り最善の方法で物事を成し遂げたいと思っています!

さらに、データはユーザーによって入力されるため、基になる表現がもう少し複雑な場合 (たとえば、TimeSpans を使用して午前 0 時過ぎの開始を説明する場合)、これはユーザーには見えないようにする必要があります。

まず、ビジネスの営業時間を曜日ごとに保存する必要があります。たとえば、次のようにタイムゾーンが関連付けられています。

- M:  1000 - 2330
- T:  1000 - 0030
- W:  1900 - 0300
- Th: 2000 - 0300
- F:  2000 - 0800
- Sa: 1000 - 0500
- Su: 1000 - 2300

これを保存する最良の方法は、次のようなクラスを使用することだと現在考えています。

public class OpeningHours
{
    ZonedDateTime OpeningTime { get; set; }
    Period durationOpen { get; set; }

    // TODO: add a method to calculate ClosingTime as a ZonedDateTime
}

ただし、ここには 2 つの主な複雑な問題があります。

  • ZonedDateTime の年、月、または日付の部分を保存したくありません。DayOfWeek だけを気にします。

    確かに、1970 年 1 月 1 日以降の最初の月曜日/火曜日などとして各値を保存することもできますが、これはハックであり、かなり間違っているようです。実装。また、後で日付の計算を試みた場合、これはおそらく奇妙で風変わりなバグで終わるだろうと感じています。

  • いずれにせよ、ユーザーは ClosingTime を入力する必要があります。クライアント側では、OpeningTime の前であれば ClosingTime が翌日であると常に仮定するような単純なことを行うことができると思いますが、これも完璧ではなく、24 時間以上開いている可能性のある場所を考慮していません (例:スーパー)

私が考えたもう1つのことは、時間/日を含むテーブルを使用し、人々が営業時間を選択するために週の時間を強調表示できるようにすることですが、それでも、OpeningTimeのDayOfWeek部分のみを保存したいという同じ問題に遭遇します.

過去 6 時間、私たち人間が時間を表現する愉快でばかげた方法について読んだことで、少し燃え尽きてしまいました!

4

1 に答える 1