Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储两个日期时间之间的时间跨度_C#_Sql Server 2008_Datetime - Fatal编程技术网

C# 存储两个日期时间之间的时间跨度

C# 存储两个日期时间之间的时间跨度,c#,sql-server-2008,datetime,C#,Sql Server 2008,Datetime,我需要一种使用C存储和操作日期范围的方法,并将数据存储在SQL数据库中。存储两次日期是最好的方法吗 例如,我需要让员工能够通过使用日期选择器选择开始日期和结束日期来选择他们在特定项目上工作的时间 我有以下进一步的要求: 我需要在开始时支持半天 和/或持续时间的结束。 我需要能够计算出 两个日期之间的天数作为 双倍,0.5等于半天。 我需要能够计算出 两次会议之间的工作日数 双人约会两次。 时间跨度需要显示在屏幕上 jquery日历。 最低限度 持续时间为半天 从5月24日到5月27日的1/2天的

我需要一种使用C存储和操作日期范围的方法,并将数据存储在SQL数据库中。存储两次日期是最好的方法吗

例如,我需要让员工能够通过使用日期选择器选择开始日期和结束日期来选择他们在特定项目上工作的时间

我有以下进一步的要求:

我需要在开始时支持半天 和/或持续时间的结束。 我需要能够计算出 两个日期之间的天数作为 双倍,0.5等于半天。 我需要能够计算出 两次会议之间的工作日数 双人约会两次。 时间跨度需要显示在屏幕上 jquery日历。 最低限度 持续时间为半天

从5月24日到5月27日的1/2天的日期范围: 2011-05-2412:00:00.000=>2011-05-2800:00:00.000

从5月24日到5月27日的一整天: 2011-05-24 00:00:00.000=>2011-05-27 12:00:00.000

5月24日半天: 2011-05-2412:00:00.000=>2011-05-25 00:00:00.000

5月24日的一整天: 2011-05-24 00:00:00.000=>2011-05-25 00:00:00.000

这种表述有意义吗?我是否应该考虑存储StartDate的日期时间和考虑到我的需求的时间跨度

编辑:也


我对结束日期的表述有意义吗?因此,5月2日将保存为“2011-05-03 00:00:00.000”,因为这是持续时间结束的时间。记住这一点,在日历中显示结束日期时,我需要从结束日期中减去一天。

对我来说,存储2个日期时间最有意义。

只存储开始和结束日期。然后计算工作天数:

Round(DateDiff(hour, StartDate, EndDate)/24, 2)

这实际上取决于您打算如何使用数据。如果第二个日期永远不会在计算时间跨度之外使用,则不应存储它,而应存储时间跨度。如果经常使用结束日期,而很少计算持续时间,则应存储2个日期时间


你甚至可以考虑存储三个值,如果你频繁使用它们,并且内存空间的增加不是问题。

< P>我相信两个DATE时间字段以及对应于开始日期和结束日期的复选框来指示它的一半或全天是否足够。根据复选框状态,您可以操纵时间组件以满足您的需要。您只需存储符合您发布要求的开始和结束日期时间值。

理想情况下,您仍然需要两个字段:

分别存储两个日期/时间-或- 存储一个日期/时间并存储经过的时间 回顾您的需求,我会选择两个单独的日期/时间字段;计算全天/半天,包括加/减假日

保留一个单独的配置表,以定义/配置一天的最大/最小持续时间


根据用户操作,在查询中或用户界面上执行任何计算(如果需要)。

我建议将开始和结束日期保存到数据库中。差异总是可以计算出来的

日期范围的关键方面是如何处理边界。您可以使用开始/结束日期的映射器,以确保在以下范围内/范围内进行正确的时间计算:

// ----------------------------------------------------------------------
public void TimePeriodMapperSample()
{
  TimeCalendar timeCalendar = new TimeCalendar();
  CultureInfo ci = CultureInfo.InvariantCulture;

  DateTime start = new DateTime( 2011, 3, 1, 13, 0, 0 );
  DateTime end = new DateTime( 2011, 3, 1, 14, 0, 0 );

  Console.WriteLine( "Original start: {0}",
                     start.ToString( "HH:mm:ss.fffffff", ci ) );
  // > Original start: 13:00:00.0000000
  Console.WriteLine( "Original end: {0}",
                     end.ToString( "HH:mm:ss.fffffff", ci ) );
  // > Original end: 14:00:00.0000000

  Console.WriteLine( "Mapping offset start: {0}", timeCalendar.StartOffset );
  // > Mapping offset start: 00:00:00
  Console.WriteLine( "Mapping offset end: {0}", timeCalendar.EndOffset );
  // > Mapping offset end: -00:00:00.0000001

  Console.WriteLine( "Mapped start: {0}",
    timeCalendar.MapStart( start ).ToString( "HH:mm:ss.fffffff", ci ) );
  // > Mapped start: 13:00:00.0000000
  Console.WriteLine( "Mapped end: {0}",
    timeCalendar.MapEnd( end ).ToString( "HH:mm:ss.fffffff", ci ) );
  // > Mapped end: 13:59:59.9999999
} // TimePeriodMapperSample

查看文章“日历时间段”部分。

我对结束日期的表示是否有意义?因此,5月2日将保存为“2011-05-03 00:00:00.000”,因为这是持续时间结束的时间。记住这一点,在日历中显示结束日期时,我需要从结束日期中减去一天……是的,这就是为什么我们要除以24。因为一天从x 00:00:00运行到x+1 00:00:00=24小时。5月24日半天=5月24日全天?是打字错误吗?一整天不应该是从2011-05-24 00:00:00到2011-05-25 00:00:00吗?那个时间段库看起来很酷-我会去看看。最后不需要库,但从结束日期减去1个勾号。到现在为止,一直都还不错。。。