C# 与没有'的日子一起工作;Don’不要在午夜准时出发

C# 与没有'的日子一起工作;Don’不要在午夜准时出发,c#,datetime,nodatime,C#,Datetime,Nodatime,我正在开发一个火车时刻表应用程序,第一列火车在0400发车,最后一列火车在0200发车。因此,此应用程序的用户处理从0300开始到0300结束的天数。换句话说,当他们说“周三凌晨2点的火车”时,他们真正的意思是“周四凌晨2点出发的火车” 我们的应用程序需要存储(例如)周三出发的所有列车,这意味着它不应该包括0300之前出发的列车,而应该包括第二天直到0300的列车 我如何在应用程序中表示这一点而不发疯?如何将其存储在数据库中以便于查询?我将存储实际的日期/时间值。然后,为了查询,要搜索“星期三的

我正在开发一个火车时刻表应用程序,第一列火车在0400发车,最后一列火车在0200发车。因此,此应用程序的用户处理从0300开始到0300结束的天数。换句话说,当他们说“周三凌晨2点的火车”时,他们真正的意思是“周四凌晨2点出发的火车”

我们的应用程序需要存储(例如)周三出发的所有列车,这意味着它不应该包括0300之前出发的列车,而应该包括第二天直到0300的列车


我如何在应用程序中表示这一点而不发疯?如何将其存储在数据库中以便于查询?

我将存储实际的日期/时间值。然后,为了查询,要搜索“星期三的任何事情”,您可以从星期三0400(含)到星期四0400(不含)

就显示而言,你最好记下日期,如果时间早于某个截止日期,则减去一天:

private static readonly LocalTime CutOff = new LocalTime(4, 0, 0);

...
LocalDate date = dateTime.Date;
if (dateTime.TimeOfDay < CutOff)
{
    date = date.PlusDays(-1);
}
var dayOfWeek = date.IsoDayOfWeek;
private static readonly LocalTime CutOff=新的LocalTime(4,0,0);
...
LocalDate日期=dateTime.date;
if(dateTime.TimeOfDay<截止时间)
{
日期=日期加星期日(-1);
}
var dayOfWeek=date.IsoDayOfWeek;

我会尽量避免单独使用日期,以免发疯。任何日期/时间都是明确的。

一种解决方法是在数据库中保留一个时间偏移量,您可以将其应用于所有时间,以有效地将其“正常化”为00:00至23:59“天”。您应该将其存储为UTC(小时更改将导致问题)。通过在小时数中减去3,您可以将其视为正常的一天。“我会尽量避免单独使用日期”因此,在数据库中存储日期时,您可以将其存储为2013-11-20T04:00:00Z,而不是2013-11-20T00:00:00?@Marius:您不会存储日期和时间吗?您什么时候只需要存储日期?如果你只存储日期,你应该只存储日期,而不是在那个日期的午夜。