Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# DateTime不允许小时值大于12_C# - Fatal编程技术网

C# DateTime不允许小时值大于12

C# DateTime不允许小时值大于12,c#,C#,我有一个简单的代码: DateTime endFinal = new DateTime( end.Year, end.Month, end.Day, Convert.ToInt32(hb.EndHours), Convert.ToInt32(hb.EndMinutes), 0); 如果输入的小时数大于12,则会抛出无效的datetime错误 System.ArgumentOutOfRangeException:“小时、分钟和秒参数描述不可表示的日期时间。” 我

我有一个简单的代码:

DateTime endFinal = new DateTime(
  end.Year, 
  end.Month, 
  end.Day, 
  Convert.ToInt32(hb.EndHours), 
  Convert.ToInt32(hb.EndMinutes), 
  0);
如果输入的小时数大于12,则会抛出无效的datetime错误

System.ArgumentOutOfRangeException:“小时、分钟和秒参数描述不可表示的日期时间。”

我能做些什么来避免它?我想输入大于12的数字

我怎样才能克服这种行为

我正在web表单web应用程序中使用该功能。

您正在查找AddHours,可能还有AddMinutes:

现在hb.EndHours可以是大于24或小于0的任何整数值

编辑:测试见下面的注释:

  DateTime endFinal = new DateTime(
    2017,
       4,
      17,
       0,
       0,
       0)
    .AddHours(13)
    .AddMinutes(50);

  Console.Write(endFinal.ToString("dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture));
结果:

  17-04-2017 13:50:00
DateTime不接受超过24小时,因为一天只有24小时。 您可以使用时间跨度来实现您想要的:

DateTime endFinal = new DateTime(end.Year, end.Month, end.Day)
         .Add(new TimeSpan(Convert.ToInt32(hb.EndHours), Convert.ToInt32(hb.EndMinutes), 0));

使用调试器并查找hb变量中存储的值。那么您的问题是大于12或24的数字?你提到了这两个…超过12个。有时候我把事情搞得太复杂了,很好:增加时间不管用。如果我加上13小时。。我在小时字段中得到一个值0。我修正了我的答案。@dan mann:请检查输出/表示。我增加了13小时的测试,这可能是我的电脑设置方式的错误吗?@dan mann:请你提供代码摘要好吗?如何表示/打印最终结果?这是一个有趣的解决方案,我现在将测试它。顺便说一句,它不接受大于12的数字。我最喜欢你的解决方案。
DateTime endFinal = new DateTime(end.Year, end.Month, end.Day)
         .Add(new TimeSpan(Convert.ToInt32(hb.EndHours), Convert.ToInt32(hb.EndMinutes), 0));