如何获得两个值的时间差Winforms DateTimePicker只考虑小时分钟和秒,没有毫秒在c#中?



我从两个dateTimePickers中获取值,我需要获得它们之间的时差。现在,我正在使用下面的代码计算时间差,但是我得到的毫秒时间差是错误的。有没有一种方法可以在不考虑毫秒的情况下计算时差?WindowsFormScreenshot

TimeSpan difference = dateTimePicker2.Value - dateTimePicker1.Value;

示例1,

  • 开始时间:4/24/2022 2:30:11 PM
  • 结束时间:4/24/2022 2:30:11 PM
  • 实际差值:-00:00:00.0049863
  • 期望差值:00:00:00

示例2,

  • 开始时间:4/24/2022 2:29:01 PM

  • end time: 4/24/2022 10:29:01 PM

  • 实际差值:07:59:59.9037925

  • 期望差值:08:00:00

示例3;

  • 开始时间:4/24/2022 4:24:28 PM

  • 结束时间:4/24/2022 10:30:28 PM

  • 实际差值:06:05:59.9648821

  • 期望差值:06:06:00

它会给出预期的答案,当我在两个dateTimePicker在Winform中重新输入时间值,但不工作时,我没有在每个dateTimePicker中重新输入分钟字段。

我不想把答案四舍五入。我想在不考虑毫秒的情况下进行差值计算。因此,无论我们为dateTimePickers解析什么值,它都会给出正确的答案。

我是c#的新手。很抱歉我说得不太清楚。非常感谢!)
DateTime adjustedDateTimePicker2 = dateTimePicker2.Value.AddMilliseconds(dateTimePicker2.Value.Millisecond * -1);

DateTime adjustedDateTimePicker1 = DateTimePicker.Value.AddMilliseconds(dateTimePicker.Value.Millisecond * -1);

TimeSpan difference = adjustedDateTimePicker2 - adjustedDateTimePicker1;

您可以分别读取小时、分钟和秒:

int hourCnt = difference.Hours;
int minuteCnt = diffenrence.Minutes;
int secondCnt = difference.Seconds;

您可以先舍入时间跨度,然后使用自定义时间跨度格式字符串(如"hh':'mm':'ss"@"hh:mm:ss")格式化结果:

var d1 = DateTime.Parse("4/24/2022 4:24:28 PM");
var d2 = DateTime.Parse("4/24/2022 10:30:28 PM");
var d = d2 - d1;
int precision = 0;
const int TIMESPAN_SIZE = 7;
int factor = (int)Math.Pow(10, (TIMESPAN_SIZE - precision));
TimeSpan roundedTimeSpan = 
new TimeSpan(((long)Math.Round((1.0 * d.Ticks / factor)) * factor));
MessageBox.Show(roundedTimeSpan.ToString(@"hh':'mm':'ss"));

显示:

06:06:00

相关内容

  • 没有找到相关文章

最新更新